MongoDB Как вернуть вложенные документы близко к указанному c местоположению? - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть коллекция, как показано ниже, мне нужно получить поддокументы больницы, которая находится рядом со спецификацией 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] }
                  ]
                }
              }
            }
          }
        }
  ])

Но он возвращает только один документ, Любые ответы будут отличной справкой, спасибо.

...