У меня есть коллекция, как показано ниже, мне нужно получить поддокументы больницы, которая находится рядом со спецификацией c. Я пробовал использовать $ near и filter, но он возвращает только один вложенный документ.
{
_id: ObjectId("5ce01ae8d28ab8073515a6f7"),
doctor_name: "Sathish",
"hospitals" : [
{
"name" : "Hospital One",
"location" : {
"coordinates" : [
12.969556,
78.597895
],
"type" : "Point",
"address" : {
"no_and_street" : "123",
"city" : "Bengaluru Urban, India",
}
},
"active" : true,
"hospital_id" : 1
},
{
"name" : "Hospital Two",
"location" : {
"coordinates" : [
17.969556,
77.597895
],
"type" : "Point",
"address" : {
"no_and_street" : "222",
"city" : "Bengaluru"
}
},
"active" : true,
"hospital_id" : 2
},
{
"name" : "Hospital Three",
"type" : "HOSPITAL",
"location" : {
"coordinates" : [
13.0827,
80.2707
],
"type" : "Point",
"address" : {
"no_and_street" : "333",
"city" : "Chennai",
}
},
"active" : true,
"hospital_id" : 3
}
]
}
Каждый документ имеет несколько свойств, например doctorName, phone et c. Он также имеет свойство больниц, которое представляет собой массив вложенных документов.
Каждый вложенный документ имеет свойство местоположения, в котором хранятся координаты описываемого вложенного документа "место". В основном мне нужно вытащить объекты мест в порядке расстояния от указанного c местоположения, которое я передаю запросу.
Я пробовал ниже
db.doctors.aggregate([
{
"$geoNear": {
"near": {
"type": "Point",
"coordinates": [
12.971,
77.5946
]
},
"spherical": true,
"distanceField": "distance",
"maxDistance": 2400,
"includeLocs": "locs",
"uniqueDocs": true,
},
},
{
"$addFields": {
"hospitals": {
"$filter": {
"input": "$hospitals",
"as": "hospitals",
"cond": {
"$and": [
{ "$eq": ["$$hospitals.location", "$locs"] },
{ "$eq": ["$$hospitals.active", true] }
]
}
}
}
}
}
])
Но он возвращает только один документ, Любые ответы будут отличной справкой, спасибо.