$ lookup с двумя полями $ concat - PullRequest
       26

$ lookup с двумя полями $ concat

0 голосов
/ 30 ноября 2018

С учетом этих документов:

{
    "name" : "User",
    "class" : "clazz",
    "reference" : "ref"
}

{
    "classReference" : "clazz+ref",
    "room" : "123"
}

Как мне выполнить поиск в $, чтобы получить такой документ (без изменения документов):

{
    "name" : "User",
    "class" : "clazz",
    "reference" : "ref",
    "classReference" : "clazz+ref",
    "room" : "123"
}

1 Ответ

0 голосов
/ 30 ноября 2018

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

db.user.aggregate([
  { "$lookup": {
    "from": Room.collection.name,
    "let": { "ref": { "$concat": ["$class", "$reference"] } },
    "pipeline": [
      { "$match": { "$expr": { "$eq": ["$classReference", "$$ref"] } } }
    ],
    "as": "ref"
  }},
  { "$project": {
    "classReference": { "$arrayElemAt": ["$ref.classReference", 0] },
    "room": { "$arrayElemAt": ["$ref.room", 0] },
    "name": 1,
    "class": 1
    "reference": 1
  }}
])

В основном вам необходимо $concat оба class и reference, а затем передать его в $lookup конвейер.

...