Развернуть Содержится пн go документ - PullRequest
1 голос
/ 13 февраля 2020

Это для MongoDB

У меня есть документ, скажем Employee, как показано ниже:

{
  "_id":"e01",
  "name":"Andy",
  "salary":"10000",
  "address":"ad01id"
}

Это простой документ сотрудника, адрес которого является внешним ключом для Address Документ как ниже (для этого выше Сотрудник)

{
   "_id": "ad01id",
   "pin":"999",
   "Home":{
           "street":"101",
           "city":"someCity"
          },
   "Country":"someCountry"
}

Мне нужна помощь, чтобы написать запрос, который будет извлекать Employee, но даст мне вывод, который будет иметь Employee s address поле расширено со всем документом как

{
  "_id":"e01",
  "name":"Andy",
  "salary":"10000",
  "address":{
            "pin":"999",
            "Home":{
                    "street":"101",
                    "city":"someCity"
                   },
            "Country":"someCountry"
            }
}

Я пробовал $lookup и $merge, но не смог получить желаемый результат - $merge скрывает ключи в раннем документе, если более поздний документ имеет тот же ключ, который имеет место в моем реальном сценарии. В моих реальных документах есть ключи с таким же именем. Например, name есть в моих настоящих Документах.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Вы также можете использовать заполнить.

db.Employee.find(
  {
  },
)
  .populate("address", "pin Home Country")
  .exec(function(err, result) {
     console.log(result)
  });
0 голосов
/ 13 февраля 2020

$ lookup необходимо для «объединения» данных из обеих коллекций, а $ unwind или $ arrayElemAt можно использовать для преобразования массива, являющегося результатом $lookup во вложенный поддокумент:

db.Employee.aggregate([
    {
        $lookup: {
            from: "Address",
            localField: "address",
            foreignField: "_id",
            as: "address"
        }
    },
    {
        $addFields: {
            address: { $arrayElemAt: [ "$address", 0 ] }
        }
    },
    {
        $project: {
            "address._id": 0
        }
    }
])

Пн go Детская площадка

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