Массив соответствия MongoDB основан на значении документа, а не на явном условии - PullRequest
0 голосов
/ 15 апреля 2020

Допустим, у меня есть следующая структура документа:

{
  "A": {
    "_id": "ID0"
  },
  "B": [
    {
      "_id": "ID0",
      "field": "X"
    },
    {
      "_id": "ID1",
      "field": "Y"
    }
  ]
}

Я хочу, чтобы проект B соответствовал _id в A. Конечный результат будет следующим:

{
  "B": [
    {
      "_id": "ID0",
      "field": "X"
    }
  ]
}

Я попробовал следующее, но, по-видимому, я делаю что-то не так. Возможно ли сопоставление на основе документа, а не явного условия?

db.collection.aggregate([
  {$match: {"B._id": "$A._id"}},
  {$project: {"B": 1}}
])

1 Ответ

1 голос
/ 15 апреля 2020

Вы можете использовать оператор агрегации $ filter для достижения этой цели:

db.collection.aggregate([
  {
    $addFields: {
      "B": {
        $filter: {
          input: "$B",
          as: "arr",
          cond: {
            $eq: [
              "$A._id",
              "$$arr._id"
            ]
          }
        }
      }
    }
  }
])

Проверьте это здесь

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