这里我有两个数组,
Usercar = [{
parentId :001
cars:[
{_id: 1, name: bmw, color: red},
{_id: 2, name: Ford, color: black},
{_id: 3, name: Volkswagen, color: black},
]
}]
Userfavorite =
[{
parentId :001,
favoriteCars:[1,3] //mongoose.Types.ObjectId
}]
我想使用 mongodb 聚合显示用户最喜欢的汽车,这是我的代码
let carsId= [1,3];
{$match: {
parentId :001
}},
{
$project:{
cars:{
$filter:{
input:"$cars",
as :'cars',
cond:{ $eq :["$$cars._id", mongoose.Types.ObjectId('1')]}
//cond:{ $eq :["$$cars._id", carsId]}
}
}
}
}
上面的代码仅有效,当传递单个 carsId 时,我想从 Usercar 的集合中获取用户最喜欢的汽车详细信息,如何在 mongodb 聚合中做到这一点?
最佳答案
可以做到这一点的一种可能的聚合是:
- 汇总 Usercar 集合
- 从用户最喜欢的集合中查找匹配的文档
- 如果有多个收藏夹文档,请将它们组合成一个收藏夹数组
- 减少汽车集合以查找与收藏夹匹配的汽车,然后添加到数组中
db.Usercar.aggregate([
{$lookup: {
from: "Userfavorite",
localField: "parentId",
foreignField: "parentId",
as: "favorite"
}},
{$set: {
favorite: {
$arrayElemAt: [
{$concatArrays: "$favorite.favoriteCars"},
0
]
}
}},
{$addFields: {
favoriteCarDetails: {
$filter: {
input: "$cars",
cond: {
$in: [
"$$this._id",
"$favorite"
]
}
}
}
}}
])
关于javascript - 如何在 Mongodb 中对多个数组使用聚合映射和过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61356767/