sql >> Database >  >> NoSQL >> MongoDB

Mongodb vind het vergelijken van array-elementen

Omdat je toevallig elke keer een exact formaat van het veld hebt (cirkel is een array met twee elementen), kun je het in een aggregatiekader transformeren in twee velden en ze vervolgens vergelijken in een projectie, en matchen om alleen de elementen terug te krijgen die voldoen aan je vereiste van tweede array-element is groter dan het eerste array-element.

db.place.aggregate( [
      { $unwind : "$center" },
      { $group : { _id : "$_id", 
                   centerX : {$first:"$center"}, 
                   centerY : {$last:"$center"} 
      } },
      { $project : { YgtX : { $gt : [ "$centerY", "$centerX" ] } } },
      { $match : { YgtX : true } }
] );

Als uw array een willekeurig paar numerieke waarden was, kunt u het bovenstaande gebruiken.

U zei in opmerkingen dat uw paar coördinaten vertegenwoordigde (lat, lang) - houd er rekening mee dat in MongoDB coördinatenparen altijd zo lang opgeslagen, lat - als uw werkelijke x, y-waarden coördinaten waren op een vlakke (in tegenstelling tot bolvormige) plaats, zou u alle documenten met een Y-coördinaat groter dan X-coördinaat kunnen vinden met een enkele geospatiale zoekopdracht:

db.place.find( { center : { $geoWithin : { $geometry : {
                  type:"Polygon", 
                  coordinates:[[[50,50],[-50,50],[-50,-50],[50,50]]]
} } } } );

De bovenstaande query gaat ervan uit dat uw coördinatensysteem van -50 naar 50 gaat langs X en Y en dat het alle punten vindt in de driehoek die alle coördinaten met Y>=X voorstelt.



  1. Verschillende recordwaarden ophalen

  2. MongoDB $addToSet

  3. Java converteert bytes naar binaire veilige string

  4. nginx lua redis cookie niet ingesteld