我试图将结果从一个MongoDB查询传递到另一个查询,但是结果在Object中,我需要将其作为数组。 示例:
var locId = db.getCollection('locations').find({country:"France"}, {_id:1}).toArray()
如何将结果传递给另一个查询:
db.getCollection('products').find({locId: {$in: locId }})
第一个查询的结果类似于:
array[1] [
obj[0] {_id: LocId123},
obj[1] {_id: LocId456},
obj[1] {_id: LocId789},
]
我能够通过此传递值:
locId = Array.from(locId , value => value._id )
问题是我无法将其封装在外部函数中,因为无法通过函数参数传递此“ _id”。 关于如何实现自动化的任何想法?
答案 0 :(得分:2)
您可以使用aggregate()组合数组中的所有ID,
var locId = db.getCollection('locations').aggregate([
{ $match: { country: "france" } },
{
$group: {
_id: null,
ids: { $push: "$_id" }
}
},
{
$project: { _id: 0, ids: 1 }
}
])
游乐场:https://mongoplayground.net/p/8_uzjCNMy00
结果:
[{
"ids": [1, 2, 3]
}]
您可以访问:
db.getCollection('products').find({locId: {$in: locId[0]['ids'] }})
如果要将两个查询合并到一个聚合查询中,请尝试
$match
country
条件products
的{{1}}集合加入foreignField _id
locId
数组products
的{{1}}为空,并将所有产品推入$group
_id
来解构products
数组$unwind
以显示必填字段products