Node JS Пн go $ почти не работает с вложенным полем - PullRequest
0 голосов
/ 29 мая 2020

Я работал над простым поиском с использованием оператора $ near, но недавно изменил свои данные, поэтому индекс местоположения 2dsphere теперь находится во вложенном поле properties.location, а не только location. Я использую драйвер Node JS mon go, и поиск работал нормально, когда индекс не был вложен в объект properties с использованием следующего запроса, но теперь ничего не возвращает:

Предыдущие работы query:

dbObject.collection("scrapedTimes").find({
            location: {
                $near: {
                    $geometry: {
                        type: "Point" ,
                        coordinates: [lngBound, latBound]
                    },
                    $minDistance: 0,
                    $maxDistance: 100000
                }
            }

})

Текущий запрос, который ничего не возвращает:

dbObject.collection("scrapedTimes").find({
            "properties.location": {
                $near: {
                    $geometry: {
                        type: "Point" ,
                        coordinates: [lngBound, latBound]
                    },
                    $minDistance: 0,
                    $maxDistance: 100000
                }
            }

})

Я выполнил этот же вложенный запрос в Mon go Compass и его похоже, работает нормально, поэтому я думаю, это может быть проблема с драйвером Node JS? Я новичок в Mon go, поэтому может быть что-то очевидное, что мне здесь не хватает, но я просто не могу заставить Node возвращать какие-либо результаты ...

Спасибо за ваше время и предложения,

Jo sh

DB layout 2dsphere index

1 Ответ

1 голос
/ 29 мая 2020

Замените $near на $nearSphere, разница между ними в основном связана с расчетами с использованием сферической геометрии. $near будет использовать плоскую геометрию и не будет работать из-за индекса 2dSphere во вложенном документе.

Обратите внимание на разницу между ними ...

В Mon go в чем разница между $ near и $ nearSphere?

...