У меня есть коллекция с индексом 2dsphere
и вы хотите использовать функции $geoWithin
и $centerSphere
для запроса.MongoDB геопространственный запрос ничего не возвращает
Отрывок модели:
{
// ...
coordinates: {
coordinates: {
type: Array,
index: '2dsphere'
}
}
// ...
}
Я успешно вставил кучу документов в базу данных, и теперь пытаюсь запросить его с помощью:
Model.find({
coordinates: {
coordinates: {
$geoWithin: {
$centerSphere : [ [ lng, lat], r ]
}
}
}
})
Проблемы я столкнулся в том, что вызов ничего не возвращает, ни ошибка, ни данные. Я попробовал это в mongo shell
, а также в моем приложении node.js
с долготами и широтами объектов, которые я могу подтвердить, были вставлены в базу данных. Я также попытался использовать $near
с $maxDistance
с тем же результатом. Кроме того, я переключил широту и долготу, чтобы проверить ... и я преобразовываю r
в радианы, делясь на радиус Земли.
Я из идей о том, что пойдет не так на данный момент, и благодарен за любые предложения!
Try "coordinates.coordinates", а не вложенности объектов. Не уверен, почему вы так структурируете этот способ. Но если вы на самом деле не показываете свою полную схему, это является хорошей причиной, почему это потерпит неудачу. Кроме того, хотя это не требуется для '$ geoWithin', вы фактически определили индекс« 2dsphere »? Для оператора '$ geoWithin' вам это не нужно (но это помогает), но для' $ near' или аналогичного вам. –
Спасибо за ваш комментарий. Как показано в Model-выдержке выше я определить '2dsphere' индекс и он будет создан успешно, что я доказал, проверив' db.Model.getIndexes(): { \t \t «V»: 1, \t \t " ключ»: { \t \t \t "coordinates.coordinates": "2dsphere" \t \t}, \t \t "имя": "coordinates.coordinates_2dsphere", \t \t "н.з.": "myDb.myCollection", \t \t "background": true, \t \t "безопасный": нулевой, \t \t "2dsphereIndexVersion": 2 \t} ' Я также попытался с помощью запросов' coordinates.coordinates', что приводит к 'E QUERY SyntaxError: Неожиданное знак .'. – hpd
Умм. Цитаты. поэтому буквально «координаты» согласовываются ». он называется [«точечной нотации»] (http://docs.mongodb.org/manual/core/document/#dot-notation) и как вы явно ссылаетесь на отдельные поля в документе MongoDB на вложенных уровнях. Я уже сказал, что индекс не требуется. –