Поскольку каждый раз, когда у вас есть точный формат поля (круг представляет собой массив из двух элементов), вы можете преобразовать его в структуру агрегации в два поля, а затем сравнить их в проекции и сопоставить, чтобы вернуть только элементы удовлетворяющий вашему требованию второго элемента массива, который больше, чем первый элемент массива.
db.place.aggregate([
{ $unwind : "$center" },
{ $group : { _id : "$_id",
centerX : {$first:"$center"},
centerY : {$last:"$center"}
} },
{ $project : { YgtX : { $gt : [ "$centerY", "$centerX" ] } } },
{ $match : { YgtX : true } }
]);
Теперь, если ваш массив был произвольной парой числовых значений, вы можете использовать приведенное выше.
Вы сказали в комментариях, что ваша пара представляет координаты (lat, long) - имейте в виду, что в координатных парах MongoDB всегда stored as long, lat - если ваши фактические значения x, y были координатами на плоской (в отличие от сферической) место, можно найти все документы, которые имели Y координат больше, чем координата X с помощью одного геопространственной запроса:
db.place.find({ center : { $geoWithin : { $geometry : {
type:"Polygon",
coordinates:[[[50,50],[-50,50],[-50,-50],[50,50]]]
} } } });
Этот запрос предполагает, что ваша система координат идет от -50 до 50 по X и Y, и он находит все точки в треугольнике, которые представляют все координаты, имеющие Y> = X.
должно быть: 'db.place.find ({'cen ter.0 ': {' $ gt ':' center.1 '}}). count() 'Обратите внимание на цитаты вокруг центра.1 – idbentley
Я пробовал этот запрос, но кажется, что он не работает. Я использую версию 2.4.7. Я отвел ответ вместо $ where вместо оператора. –
вы не можете ссылаться на содержимое документа с правой стороны от того, где (то есть {a: 1} в порядке, {a: b}, где b - другое поле, не в порядке. Если вам нужно сравнить x и y вы может считать, что схема не подходит для вашего случая использования - вам нужно хранить x и y, как это? –