sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongodb find sammenligning af array-elementer

Fordi du tilfældigvis har det nøjagtige format af feltet hver gang (cirkel er en to-element-array), kan du transformere den i aggregeringsramme til to felter og derefter sammenligne dem i en projektion og matche for at få tilbage kun de elementer, der opfylder dine krav om andet array-element er større end det første array-element.

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

Nu, hvis dit array var et vilkårligt par af numeriske værdier, så kan du bruge ovenstående.

Du sagde i kommentarer, at dit par repræsenterede koordinater (lat, lang) - husk, at i MongoDB er koordinatpar altid lagret så længe, ​​lat - hvis dine faktiske x, y-værdier var koordinater på et fladt (i modsætning til sfærisk) sted, kunne du finde alle de dokumenter, der havde Y-koordinater større end X-koordinater med en enkelt geospatial forespørgsel:

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

Ovenstående forespørgsel antager, at dit koordinatsystem går fra -50 til 50 langs X og Y, og det finder alle punkter i trekanten, der repræsenterer alle koordinater med Y>=X.



  1. Django-nonrel ved hjælp af ListField, der indeholder EmbeddedObjects i admin

  2. Forespørgsel MongoDB med længdekriterier

  3. Er GridFS hurtig og pålidelig nok til produktion?

  4. Redis replikeringskonfiguration