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

Mongodb trova il confronto degli elementi dell'array

Poiché ti capita di avere ogni volta il formato esatto del campo (il cerchio è un array di due elementi) puoi trasformarlo in un framework di aggregazione in due campi e quindi confrontarli in una proiezione e abbinare per ottenere solo gli elementi che soddisfano la tua esigenza di il secondo elemento dell'array è maggiore del primo elemento dell'array.

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

Ora, se il tuo array era una coppia arbitraria di valori numerici, puoi usare quanto sopra.

Nei commenti hai detto che la tua coppia rappresentava le coordinate (lat, long) - tieni presente che in MongoDB le coppie di coordinate sono sempre memorizzati come long, lat - se i tuoi valori x, y effettivi fossero coordinate in un luogo piatto (anziché sferico), potresti trovare tutti i documenti che avevano la coordinata Y maggiore della coordinata X con una singola query geospaziale:

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

La query precedente presuppone che il tuo sistema di coordinate vada da -50 a 50 lungo X e Y e trova tutti i punti nel triangolo che rappresenta tutte le coordinate con Y>=X.