我正在使用PyMongo中的$lookup成功地“连接”了两个集合(这个有效)。 我遇到的问题是,我要加入的第二个集合在返回所有记录时可能会超过BSON文档大小。
我希望使用$limit来限制允许连接到“match_docs”下的记录数量,例如:每个obj_id最多100条来自“comments”的记录:
db.indicators.aggregate([
{
"$lookup": {
"from": "comments",
"localField": "_id",
"foreignField": "obj_id",
"as": "match_docs"
}
}
])
我尝试了各种类型的$limit,似乎只限制了所有结果的总数,而不仅仅是联接的结果。
{allowDiskUse: true}
应该可以解决问题。 - felix$lookup
返回的内容上使用$match
以减少结果吗?当管道阶段为$lookup
->$unwind
->$match
且$match
中的条件(连续)和$match
引用了来自$lookup
的数组时,存在一种特殊情况,后两个阶段被“提升”到$lookup
中。这是一种优化方式,可减少可能返回的条目数。 - Neil Lunn$lookup
之后立即使用$unwind
,最好在$unwind
之后立即使用$match
。如果这比我已经说的更清楚,请这样做。也许你应该展示你整个“预期”的聚合管道,然后我们可以建议是否适合你的目的。 - Neil Lunn