MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb findet den Vergleich von Array-Elementen

Da Sie zufällig jedes Mal das genaue Format des Felds haben (Circle ist ein Array mit zwei Elementen), können Sie es im Aggregationsframework in zwei Felder umwandeln und sie dann in einer Projektion vergleichen und abgleichen, um nur die Elemente zurückzugeben, die Ihren Anforderungen entsprechen zweites Array-Element ist größer als erstes Array-Element.

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

Wenn Ihr Array nun ein beliebiges Paar numerischer Werte war, können Sie das obige verwenden.

Sie sagten in Kommentaren, dass Ihr Paar Koordinaten darstellt (lat, long) - denken Sie daran, dass in MongoDB Koordinatenpaare immer gespeichert solange, Breitengrad - Wenn Ihre tatsächlichen x-, y-Werte Koordinaten auf einem flachen (im Gegensatz zu einem kugelförmigen) Ort wären, könnten Sie mit einer einzigen Geodatenabfrage alle Dokumente finden, deren Y-Koordinate größer als die X-Koordinate war:

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

Die obige Abfrage geht davon aus, dass Ihr Koordinatensystem von -50 bis 50 entlang X und Y verläuft, und findet alle Punkte im Dreieck, das alle Koordinaten mit Y>=X darstellt.