MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mongodb trouve en comparant les éléments du tableau

Parce que vous avez le format exact du champ à chaque fois (le cercle est un tableau à deux éléments), vous pouvez le transformer dans un cadre d'agrégation en deux champs, puis les comparer dans une projection, et faire correspondre pour récupérer uniquement les éléments satisfaisant votre exigence de le deuxième élément du tableau étant supérieur au premier élément du tableau.

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

Maintenant, si votre tableau était une paire arbitraire de valeurs numériques, vous pouvez utiliser ce qui précède.

Vous avez dit dans les commentaires que votre paire représentait des coordonnées (lat, long) - gardez à l'esprit que dans MongoDB, les paires de coordonnées sont toujours stocké en tant que long, lat - si vos valeurs réelles x, y étaient des coordonnées sur un endroit plat (par opposition à sphérique), vous pourriez trouver tous les documents dont la coordonnée Y est supérieure à la coordonnée X avec une seule requête géospatiale :

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

La requête ci-dessus suppose que votre système de coordonnées va de -50 à 50 le long de X et Y et trouve tous les points du triangle qui représentent toutes les coordonnées ayant Y>=X.