如果我有以下对象
obj
:
{
"abc1": "xyz1",
"abc2": "xyz2",
"abc3": "xyz3"
}
我想做一个聚合,比如:
db.collection.aggregate([
{
"$match": {
"_id": {
$in:
Object.keys(obj)
}
}
},
{
"$lookup": {
"from": "subdocument",
"pipeline": [
{
"$match": {
"_id": ObjectId(matching_value)
}
},
],
"as": "subdocument"
}
},
{ "$unwind": "$subdocument" }
])
我怎么得到
$lookup
要匹配对象键以匹配对象值的管道?有可能吗?
所以这是一个单一的数据库调用版本:
let obj = {
"abc1": "xyz1",
"abc2": "xyz2",
"abc3": "xyz3"
}
for (let key in obj)
{
db.collection.aggregate([
{
"$match": {
"_id":
ObjectId(key)
}
},
{
"$lookup": {
"from": "subdocument",
"pipeline": [
{
"$match": {
"_id": ObjectId(obj[key])
}
},
],
"as": "subdocument"
}
},
{ "$unwind": "$subdocument" }
])
}
示例集合
db.maindocuments
[
{
_id: "abc1",
data: "data"
},
{
_id: "abc2",
data: "data"
},
{
_id: "abc3",
data: "data"
}
]
db.subdocuments
[
{
_id: "xyz1",
data: "data"
},
{
_id: "xyz2",
data: "data"
},
{
_id: "xyz3",
data: "data"
}
]