поиск по всем документам внутри массива - агрегация MongoDB - PullRequest
2 голосов
/ 01 февраля 2020

Мне нужно выполнить этап поиска для всех документов в массиве.

Коллекция:

{
  {
    "name": "test",
    "age": 2,
    "replies": [
        {
            "title": "testtt",
            "merta_id": 1
        },
        {
            "title": "testiona",
            "merta_id": 5
        },
        {
            "title": "the thirth test",
            "merta_id": 4
        }
    ]

  }
}

Коллекция mertas:

{
  {
     _id: 1,
     a: "aaaa",
     b: "bbbb"
  },
  {
     _id: 5,
     a: "AaAA",
     b: "BbbB"
  },
    {
     _id: 4,
     a: "Aou",
     b: "Boo"
  }
}

Ожидаемый результат:

{
  {
    "name": "test",
    "age": 2,
    "replies": [
        {
            "title": "testtt",
            "merta_id": 1,
            "merta": {
                 _id: 1,
                 a: "aaaa",
                 b: "bbbb"
            }
        },
        {
            "title": "testiona",
            "merta_id": 5,
            "merta": {
                 _id: 5,
                 a: "aaaa",
                 b: "bbbb"
             }
        },
        {
            "title": "the thirth test",
            "merta_id": 4
            "merta":{
                  _id: 4,
                  a: "Aou",
                  b: "Boo"
              }
        }
    ]

  }
}

Мне нужен этап агрегации выполнить поиск по всем документам в «ответах» и добавить новое поле merta, которое должно искать из коллекции mertas. я попытался использовать $map stage, но получил сообщение об ошибке "Нераспознанное имя этапа конвейера: '$ lookup'"

1 Ответ

2 голосов
/ 01 февраля 2020

Вы можете использовать ниже агрегации

db.collection.aggregate([
    { "$unwind": "$replies" },
    { "$lookup": {
        "from": "mertas",
        "localField": "replies.merta_id",
        "foreignField": "_id",
        "as": "replies.merta"
    }},
    { "$unwind": "$replies.merta" },
    { "$group": {
        "_id": "$_id",
        "data": { "$first": "$$ROOT" },
        "replies": { "$push": "$replies" }
    }},
    { "$replaceRoot": {
        "newRoot": {
            "$mergeObjects": ["$data", { "replies": "$replies" }]
        }
    }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...