$ lookup和两个$ concat字段

时间:2018-11-30 09:53:29

标签: mongodb mongodb-query aggregation-framework mongodb-lookup

给出这些文件:

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

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

char[] arrayA = {'b', 'c'};
char[] arrayB = ArrayUtils.add(arrayA, 0, 'a');
// arrayB: [a, b, c]

1 个答案:

答案 0 :(得分: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
  }}
])

基本上,您需要同时$concat classreference,然后将其传递到$lookup管道。