Я смотрел на другие вопросы, не находя подходящего ответа для своей проблемы, поэтому я надеюсь, что вы мне поможете.
СИТУАЦИЯ
В настоящее время я работаю над приложением локализации с MongoDB
.На данный момент я тестирую свои запросы в оболочке MongoDB
.
У меня есть коллекция Point
документов с указанием местоположений.Я использую GeoJSON
объекты для координат моей точки.
Вот как выглядит документ Point:
{
_id: "Roma_DellArte",
localisations: [
{ location_type_id: 1, location: { type: "Point", coordinates: [ 41.9097306,12.2558141 ] } }
]
}
My location_type_id
относится к другой коллекции, просто вы должны знать.
Я уже сделал запрос, который возвращает все точки около точного местоположения:
db.point.createIndex({ 'localisations.location': "2dsphere" })
db.point.find({
'localisations.location': {
$near: {
$geometry: { type: "Point", coordinates: [ 48.8588377, 2.2770207 ] },
$minDistance: 0,
$maxDistance: 100000
}
}
})
Теперь я хотел бы запросить все точки, находящиеся рядом с точным местоположением И те с определенным location_type_id
.
ПРОБЫ И ОТКАЗЫ
Я пробовал много запросов в оболочке MongoDB
, но ни один из них не дал удовлетворительного результата.
Запрос 1 Я думаю, он ничего не возвращает, потому что location:
не является точным полем.
db.point.createIndex({ location: "2dsphere" })
db.point.find({
'localisations': {
location_type_id: 1,
location: {
$near: {
$geometry: { type: "Point", coordinates: [ 48.8588377, 2.2770207 ] },
$minDistance: 0,
$maxDistance: 100000
}
}
}
})
Запрос 2
Основная проблема заключается в том, что он получает точечный документ, если в поле localisations
есть объект с правильным location_type_id
и объект с правильным location
.Это не обязательно тот же объект, которым я хочу быть.
см .: https://docs.mongodb.com/manual/tutorial/query-array-of-documents/#combination-of-elements-satisfies-the-criteria - второй абзац в конце.
db.point.createIndex({ 'localisations.location': "2dsphere" })
db.point.find({
'localisations.location_type_id': 1,
'localisations.location': {
$near: {
$geometry: { type: "Point", coordinates: [ 48.8588377, 2.2770207 ] },
$minDistance: 0,
$maxDistance: 100000
}
}
})
Запрос 3
Я хотел попробовать этот метод: https://docs.mongodb.com/manual/tutorial/query-arrays/#query-for-an-array-element-that-meets-multiple-criteria
db.point.createIndex({ location: "2dsphere" })
db.point.find({
localisations: {
$elemMatch: {
location_type_id: 1,
location: {
$near: {
$geometry: { type: "Point", coordinates: [ 48.8588377, 2.2770207 ] },
$minDistance: 0,
$maxDistance: 100000
}
}
}
}
})
К сожалению, я получаю эту ошибку:
Error: error: {
"ok" : 0,
"errmsg" : "geoNear must be top-level expr",
"code" : 2,
"codeName" : "BadValue"
}
Теперь вы знаете все, я надеюсь, что вы можетепомоги мне.