我有用户模式,人员字段包含 viewers
属性,该属性包含一个 ObjectId 数组,例如作为用户集合本身的引用
{
"username": "user1",
"password": "password",
"email": "user1@gmail.com",
"people": [{
"id": 1,
"viewers": ["ObjectId....", "ObjectId...."]
},
{
"id": 2,
"viewers": ["ObjectId....", "ObjectId...."]
}
]
}
我需要为查看器中的每个元素做 $lookup
问题是,当我使用下面的管道时,会为每个文档推送相同的查看器
{
$unwind: {
path: "$people.viewers",
preserveNullAndEmptyArrays: true
}
},
{
$lookup: {
from: "users",
localField: "people.viewers",
foreignField: "_id",
as: "people"
}
},
{
$unwind: {
path: "$viewers",
preserveNullAndEmptyArrays: true
}
},
{
$project: {
username: 1,
"viewers.username": 1
}
},
{
$group: {
_id: "$_id",
username: { $first: "$username" },
people: { $first: "$people" },
viewers: { $push: "$viewers" }
}
},
{
$project: {
username: 1,
"people.id": 1,
"people.viewers": "$viewers"
}
}
那个聚合有什么问题
最佳答案
您可以在 mongodb 3.4 及更高版本中尝试以下聚合
User.aggregate([
{ "$unwind": { "path": "$people", "preserveNullAndEmptyArrays": true }},
{ "$lookup": {
"from": "users",
"localField": "people.viewers",
"foreignField": "_id",
"as": "people.viewers"
}},
{ "$group": {
"_id": "$_id",
"username": { "$first": "$username" },
"email": { "$first": "$email" },
"people": { "$push": "$people" }
}}
])
关于mongodb - $查找数组mongo聚合中的每个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52042526/