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)