我有三个收藏品。
db.a.insert([
{ "_id" : ObjectId("5b56989172ebcb11105e8f41"), "db_type":b, "number" : 1},
{ "_id" : ObjectId("5b56989172ebcb11105e8f42"), "db_type":c, "number" : 2},
])
db.b.insert([
{ "_id" : ObjectId("5b56989172ebcb11105e8f43"), "number" : 1, "value" : "111"},
])
db.c.insert([
{ "_id" : ObjectId("5b56989172ebcb11105e8f44"), "number" : 2, "value" : "222"},
])我想做一个查找查询,根据db_type从每个集合中获取值。
在这种情况下我该怎么办?
结果:
{ "_id" : ObjectId("5b56989172ebcb11105e8f41"), "db_type" : b, "number" : 1, "value" : "111"}
{ "_id" : ObjectId("5b56989172ebcb11105e8f42"), "db_type" : c, "number" : 2, "value" : "222"}堵塞部分..。
db.getCollection('a').aggregate([
{
"$lookup":{
"from": "b" or "c", // I want to give condition here.
"localField": "number",
"foreignField": "number",
"as": "result"
}
},
])发布于 2022-04-26 16:06:16
对于您的情况,您只有2种情况可以查找-- b和c。您可以简单地进行两个单独的查找,并使用$setUnion将结果分组。
db.a.aggregate([
{
"$lookup": {
"from": "b",
"let": {
db_type: "$db_type",
number: "$number"
},
"pipeline": [
{
$match: {
$expr: {
$and: [
{
$eq: [
"$$db_type",
"b"
]
},
{
$eq: [
"$$number",
"$number"
]
}
]
}
}
}
],
"as": "bLookup"
}
},
{
"$lookup": {
"from": "c",
"let": {
db_type: "$db_type",
number: "$number"
},
"pipeline": [
{
$match: {
$expr: {
$and: [
{
$eq: [
"$$db_type",
"c"
]
},
{
$eq: [
"$$number",
"$number"
]
}
]
}
}
}
],
"as": "cLookup"
}
},
{
"$addFields": {
"allLookup": {
"$setUnion": [
"$bLookup",
"$cLookup"
]
}
}
}
])这是供您参考的蒙戈游乐场。
https://stackoverflow.com/questions/72016807
复制相似问题