MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Mongodb encontra comparando elementos de array


Como você tem o formato exato do campo toda vez (o círculo é uma matriz de dois elementos), você pode transformá-lo em uma estrutura de agregação em dois campos e depois compará-los em uma projeção e combinar para obter de volta apenas os elementos que satisfazem seu requisito de segundo elemento da matriz sendo maior que o primeiro elemento da matriz.
db.place.aggregate( [
      { $unwind : "$center" },
      { $group : { _id : "$_id", 
                   centerX : {$first:"$center"}, 
                   centerY : {$last:"$center"} 
      } },
      { $project : { YgtX : { $gt : [ "$centerY", "$centerX" ] } } },
      { $match : { YgtX : true } }
] );

Agora, se sua matriz for um par arbitrário de valores numéricos, você poderá usar o acima.

Você disse nos comentários que seu par representava coordenadas (lat, long) - lembre-se de que no MongoDB os pares de coordenadas são sempre armazenado como long, lat - se seus valores reais de x, y fossem coordenadas em um lugar plano (em oposição a esférico), você poderia encontrar todos os documentos que tinham a coordenada Y maior que a coordenada X com uma única consulta geoespacial:
db.place.find( { center : { $geoWithin : { $geometry : {
                  type:"Polygon", 
                  coordinates:[[[50,50],[-50,50],[-50,-50],[50,50]]]
} } } } );

A consulta acima assume que seu sistema de coordenadas vai de -50 a 50 ao longo de X e Y e encontra todos os pontos no triângulo que representa todas as coordenadas com Y>=X.