在与另一个集合进行看似复杂的匹配时,我在理解聚合管道时遇到了一些问题.目标是获得特定用户在分析集合中没有video_impression
个条目的视频的列表.
我的数据看起来像这样:
db={
"videos": [
{
"_id": "1",
"name": "1's Video",
"status": "complete",
"privacy": "public"
},
{
"_id": "2",
"name": "2's Video",
"status": "complete",
"privacy": "public"
},
{
"_id": "3",
"name": "3's Video",
"status": "complete",
"privacy": "public"
},
{
"_id": "4",
"name": "4's Video",
"status": "complete",
"privacy": "private"
},
{
"_id": "5",
"name": "5's Video",
"status": "flagged",
"privacy": "public"
}
],
"analytics": [
{
"_id": "1",
"user": "1",
"event": "video_impression",
"data": {
"video": "1"
}
},
{
"_id": "2",
"user": "2",
"event": "video_impression",
"data": {
"video": "2"
}
}
]
}
我设法让一个匹配器工作,但它工作了"globally" ie.它没有考虑用户id,所以它返回的文档与任何人都不匹配.
db.videos.aggregate([
{
$match: {
"status": "complete",
"privacy": "public"
}
},
{
$lookup: {
from: "analytics",
localField: "_id",
foreignField: "data.video",
as: "matched_docs"
}
},
{
$match: {
"matched_docs": {
$eq: []
}
}
}
])
我try 向管道添加另一个$lookup
阶段来查找user
字段,但似乎也不起作用,因为数据总是空的.我遇到的Here's a Mongo Playground个问题可能有助于进一步解释它.