Геопространственный поиск возвращает меньше результатов, чем доступно - PullRequest
0 голосов
/ 28 июня 2018

У меня есть коллекция (пользователи) с 356 документами и индексом «2dsphere» по полю геоданных. 120 документов имеют поле геоданных: {тип: «Точка», координаты: [X, Y]}, где X и Y - координаты в пределах Германии.

Если я выполню следующую агрегацию:

db.users.aggregate(
    [
        {
            "$geoNear":{
                near: { type: "Point", coordinates: [48.783469, 9.181842] },
                distanceField: "distanceCalculated",
                spherical: true
            }
        },
        {
             "$sort":{"distanceCalculated":1}
        }
    ]
)

Я получаю 46 результатов, но, как я понимаю, я должен получить как минимум 100 (стандарт для параметра limit) Как я вижу, все результаты находятся в пределах ~ 210 километров. Существует ли какой-либо недокументированный стандарт maxDistance? Я также пробовал разные значения maxDistance, но никогда не получал более 48 результатов.

Мой вопрос: что мне нужно сделать, чтобы все (120) результаты упорядочились по расстоянию?

1 Ответ

0 голосов
/ 28 июня 2018

Найдены подводные камни: Все (120) документы имели тип geodata.coordinates, установленный для объекта вместо массива. К сожалению, я не могу сказать, почему mongoDB все же вернул некоторые результаты вместо нуля. Я преобразовал все записи, используя следующую команду, теперь она работает:

db.users.find({ "geodata": { $exists: true, $ne: null }}).forEach((user)=> { 
  var coordinates = user.geodata.coordinates;
  user.geodata.coordinates = [coordinates["0"], coordinates["1"]];
  db.users.save(user);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...