1

鉴于这些文件:

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

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

如何执行 $lookup 来检索这样的文档(不更改文档):

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

1 回答 1

3

您可以将以下聚合与 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
  }}
])

基本上你需要 $concatclass然后reference将它传递给$lookup管道。

于 2018-11-30T10:11:00.970 回答