Агрегат mongodb всегда возвращает null в массиве объекта коллекции - PullRequest
0 голосов
/ 21 июня 2020

У меня есть такой человек, У него много компаний, [ONE TO MANY]

{
        "_id" : ObjectId("5eef12533167638883fba5ad"),
        "companies" : [  
                         ObjectId("00000000000000000011111") , 
                         ObjectId("0000000000000000022222") 
                      ],
        "email" : "test@mailinator.com",
        "phoneNumber" : "+1689999999999",
        "createdAt" : ISODate("2020-06-21T07:54:56.529Z"),
        "updatedAt" : ISODate("2020-06-21T07:54:56.529Z")
}

Я хочу объединить компании в данные о компаниях, которые я пытаюсь использовать, вот так

db.people.aggregate(
  { "$lookup": {
    "from": "companies",
    "localField": "companies",
    "foreignField": "_id",
    "as": "companies"
  }},
)

но результат такой же, как у запроса db.people.find (), как исправить способ запроса, чтобы она в этом массиве показывала данные компаний,

я ожидал:

{
        "_id" : ObjectId("5eef12533167638883fba5ad"),
        "companies" : [  
                         {
                           "_id": ObjectId("00000000000000000011111"),
                            "name": "Company one"
                          },
                           ..... so on
                      ],
        "email" : "test@mailinator.com",
        "phoneNumber" : "+1689999999999",
        "createdAt" : ISODate("2020-06-21T07:54:56.529Z"),
        "updatedAt" : ISODate("2020-06-21T07:54:56.529Z")
}

1 Ответ

1 голос
/ 21 июня 2020

ВАЖНО: Начиная с MongoDB 3.4, если localField является массивом, вы можете сопоставить элементы массива со скаляром foreignField без необходимости этапа $ unwind.

I считаю, что ваш совокупный вызов неверен. .aggregate() получает массив.

db.people.aggregate([
  { 
   $lookup: {
    from: "companies",
    localField: "companies",
    foreignField: "_id",
    as: "companies"
   }
  }
])

Убедитесь, что from, localField и foreignField верны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...