sql >> Base de Datos >  >> NoSQL >> MongoDB

Mongodb encuentra la comparación de elementos de matriz

Debido a que siempre tiene el formato exacto del campo (el círculo es una matriz de dos elementos), puede transformarlo en un marco de agregación en dos campos y luego compararlos en una proyección y combinarlos para obtener solo los elementos que satisfacen su requisito de el segundo elemento de la matriz es mayor que el primer elemento de la matriz.

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

Ahora, si su matriz fuera un par arbitrario de valores numéricos, entonces puede usar lo anterior.

Usted dijo en los comentarios que su par representaba coordenadas (lat, long):tenga en cuenta que en MongoDB los pares de coordenadas son siempre almacenado como long, lat - si sus valores x, y reales fueran coordenadas en un lugar plano (en lugar de esférico), podría encontrar todos los documentos que tenían una coordenada Y mayor que la coordenada X con una sola consulta geoespacial:

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

La consulta anterior asume que su sistema de coordenadas va de -50 a 50 a lo largo de X e Y y encuentra todos los puntos en el triángulo que representa todas las coordenadas que tienen Y>=X.