sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb hitta jämföra arrayelement

Eftersom du råkar ha exakt format på fältet varje gång (cirkel är en array med två element) kan du omvandla den i aggregeringsram till två fält och sedan jämföra dem i en projektion och matcha för att få tillbaka bara de element som uppfyller dina krav på andra array-elementet är större än det första array-elementet.

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

Nu, om din array var ett godtyckligt par av numeriska värden, då kan du använda ovanstående.

Du sa i kommentarer att ditt par representerade koordinater (lat, lång) - kom ihåg att i MongoDB är koordinatpar alltid lagrade så länge, lat - om dina faktiska x, y-värden var koordinater på en platt (i motsats till sfärisk) plats, kunde du hitta alla dokument som hade Y-koordinater större än X-koordinater med en enda geospatial fråga:

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

Ovanstående fråga förutsätter att ditt koordinatsystem går från -50 till 50 längs X och Y och det hittar alla punkter i triangeln som representerar alla koordinater som har Y>=X.



  1. $addToSet till en array men det ger mig null

  2. Hur man startar en anpassad RQ-arbetare i en Docker Container (Python, Flask och Redis)

  3. Node.js MongoDB collection.find().toArray returnerar ingenting

  4. Skillnad mellan dokumentbaserade och nyckel-/värdebaserade databaser?