#mongodb #geospatial #mongoose
#mongodb #геопространственные #mongoose
Вопрос:
Я выполняю геопространственный запрос с помощью $polygon
поиска. Мой запрос:
{
'location_latLong': {
'$within': {
'$polygon': {
point1: {
lon: '-74.2621',
lat: '40.5788'
},
point2: {
lon: '-74.2621',
lat: '40.8494'
},
point3: {
lon: '-73.7499',
lat: '40.8494'
},
point4: {
lon: '-73.7499',
lat: '40.5788'
}
}
}
}
}
В моей коллекции у меня есть документ, который ЯВНО находится внутри полигона:
{
"_id": ObjectId("4e95c285cb8a0efc2b00001a"),
"addedOn": Date(1318437509839),
"checkinDate": Date(1318392000000),
"checkinTime": Date(1318437476000),
"location_city": "New York",
"location_country": "United States",
"location_latLong": {
"xLon": -74.007124,
"yLat": 40.71455
},
"location_source": "personprofile",
"location_state": "New York",
"location_zip": ""
}
и у меня есть 2d
индекс location_latLong
. Я знаю, что MongoDB игнорирует имена ключей (предположительно), так что это не должно иметь значения. Итак, почему это возвращает 0 результатов?
РЕДАКТИРОВАТЬ Я просто запустил explain
, как рекомендовано в комментариях, и я получаю:
{
"cursor" : "GeoBrowse-polygon",
"nscanned" : 0,
"nscannedObjects" : 0,
"n" : 0,
"millis" : 0,
"nYields" : 0,
"nChunkSkips" : 0,
"isMultiKey" : false,
"indexOnly" : false,
"indexBounds" : {
"location_latLong" : [
[
[
0,
0
],
[
0.000021457672119140625,
0.000021457672119140625
]
],
[
[
-0.000021457672119140625,
-0.000021457672119140625
],
[
0,
0
]
],
[
[
-0.000021457672119140625,
0
],
[
0,
0.000021457672119140625
]
],
[
[
0,
-0.000021457672119140625
],
[
0.000021457672119140625,
0
]
]
]
},
"keysChecked" : NumberLong(8),
"lookedAt" : NumberLong(4),
"matchesPerfd" : NumberLong(0),
"objectsLoaded" : NumberLong(0),
"pointsLoaded" : NumberLong(0)
}
Комментарии:
1. этот запрос выглядит хорошо, я не знаю точной проблемы.. Вы получили сообщение об ошибке? вы указали минимальные / максимальные границы в индексе..
2. Я не указывал минимальные / максимальные границы в индексе, как это должно быть -180 .. 180 по умолчанию, нет?
3. Можете ли вы удалить mongoose из уравнения и запустить его из оболочки с помощью a
.explain()
? Это может прояснить, что происходит4. @GatesVP Я добавил
explain
, как вы предложили
Ответ №1:
Я решил проблему. Я передавал строки, и я должен был передавать числа с плавающей запятой.
Спасибо за ваше время =)