как применить поиск внутри поля mongodb внутри поля? - PullRequest
0 голосов
/ 05 августа 2020

У меня есть Randomhospital именованная коллекция, внутри которой есть поле с именем больница, которое выглядит примерно так:

{
  "id": "GuDMUPb9gq",
  "Hospital Name": "UPHI",
  "Hospital City": "Gurgaon"
}

У меня также есть другой контрольный список коллекции, в котором есть поле clinicId . Я хочу применить поиск, сопоставляя clinicId с идентификатором объекта больницы.

let pipeline=[{
            $lookup: {
                from: "Randomhospital",
                localField: "clinicId",
                foreignField: "hospital.id",
                as: "hospital_details"
            }
        }]
let query=await checklist.aggregate(pipeline)

, но работает не так, как ожидалось, создает пустой массив? Может ли кто-нибудь предложить исправление в коде, если таковое имеется?

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Похоже, вам нужен другой вариант использования оператора lookup с let и pipeline Проверить документацию

Возможно ваше решение будет выглядеть так следующий:

let pipeline=[{
            $lookup: {
                from: "Randomhospital",
                "let": {"cid": "$clinicId"},
                "pipeline": [{
                  "$match": {
                    "$expr": {
                      "$eq": ["$hospital.id", "$$cid"]
                    }
                  },
                }]
                as: "hospital_details"
            }
        }]
let query=await checklist.aggregate(pipeline)
0 голосов
/ 05 августа 2020

Вы делаете lookup от checklist до Randomhospital.

Убедитесь, что идентификатор правильный.

Используйте

       $lookup: {
            from: "Randomhospital",
            localField: "clinicId",
            foreignField: "id",
            as: "hospital_details"
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...