Edit: удалил весь предыдущий текст.
Суть в том, что для $box нужно задавать координаты таким образом:
$box: [
[ <нижний левый угол> ],
[ <верхний правый угол> ]
]
При этом, сначала должна указываться долгота (longtitude), а потом широта (latitude). Для Москвы долгота, грубо говоря, — 37, а широта — 55 (опять же, в грубом приближении).
Чтобы понять, где будет находиться нижний левый и верхний правый углы, нужно представить всю ситуацию так: плюсовая долгота начинается от Лондона и идёт вправо. Плюсовая широта начинается от экватора и идёт вверх. Значит точка с координатами (0, 0) будет находиться левее и ниже Москвы. В левом нижнем углу будут минимальные широта и долгота, а в правом верхнем углу — максимальные широта и долгота.
Чтобы сделать правильные координаты для $box, нужно для левого нижнего угла взять минимальные значения широты и долготы —
[36.362, 55.38691]
, а для верхнего правого — максимальные,
[38.573, 56.00606]
. В итоге, этот запрос охватывает точку, которую вы искали:
db.places.find({
loc: {
$within: {
$box: [
[36.362, 55.38691],
[38.573, 56.00606]
]
}
}
})
На моей машине, во всяком случае, он нормально работает, и нужная точка попадает в диапазон.