Mongodb 带有两个$concat字段的$lookup

Mongodb 带有两个$concat字段的$lookup,mongodb,mongodb-query,aggregation-framework,mongodb-lookup,Mongodb,Mongodb Query,Aggregation Framework,Mongodb Lookup,鉴于这些文件: { "name" : "User", "class" : "clazz", "reference" : "ref" } { "classReference" : "clazz+ref", "room" : "123" } { "name" : "User", "class" : "clazz", "reference" : "ref", "classReference" : "clazz+ref",

鉴于这些文件:

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

{
    "classReference" : "clazz+ref",
    "room" : "123"
}
{
    "name" : "User",
    "class" : "clazz",
    "reference" : "ref",
    "classReference" : "clazz+ref",
    "room" : "123"
}
如何执行$lookup来检索这样的文档(而不更改文档):


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

基本上,您需要同时将
引用
传递给管道。

类引用的值是多少?“clazz”或“ref”?两者都连接在一起(符号选择不当)。编辑问题以更好地反映我的愿望。那么文档中的引用(公共)字段是哪个?字段classReference是第一个文档的类和引用的串联。在SQL中,我会从user,room WHERE room.classReference=CONCAT(user.name,user.class)