【发布时间】:2017-11-08 20:48:35
【问题描述】:
我在 PyMongo 中使用 $lookup 成功地“加入”了两个集合(这有效)。我有一个问题,我加入的第二个集合在返回所有记录时可能超过 BSON 文档大小。
我希望使用 $limit 来限制允许在“match_docs”下加入的记录数,例如:每个 obj_id 的“cmets”最多 100 条记录:
db.indicators.aggregate([
{
"$lookup": {
"from": "comments",
"localField": "_id",
"foreignField": "obj_id",
"as": "match_docs"
}
}
])
我尝试了各种类型的 $limit,它似乎只限制了整体结果的总数,而不仅仅是连接。
【问题讨论】:
-
你不能在 $lookup 中设置一个限制,但是你不需要这个来使查询工作。将
{allowDiskUse: true}添加到您的聚合选项应该可以解决问题 -
@felix OP 谈论的是 BSON 文档大小限制,而不是内存限制。
-
您能否对从
$lookup返回的内容进行$match以减少结果?当流水线阶段为$lookup->$unwind->$match并且$match(连续)和$match中的条件引用来自$lookup的数组时,有一种特殊情况。舞台被“提升”到$lookup。这是减少可能返回的条目的优化。 -
@NeilLunn 你知道这在查询表单中会是什么样子吗?
-
是的,
$unwindimmediately 位于$lookup之后,理想情况下$matchimdediately 位于$unwind之后。如果这比我已经说过的更清楚。也许您应该展示您的整个“预期”聚合管道,然后我们可以建议这是否适合您的目的。
标签: mongodb join aggregation-framework pymongo