作者:shangce | 来源:互联网 | 2023-02-01 19:47
我在PyMongo中使用$ lookup成功“加入”两个集合(这可行)。我遇到的问题是,当我加入的第二个集合返回所有记录时,它可能超出BSON文档的大小。
我想使用$ limit来限制“ match_docs”下允许加入的记录数,例如:每个obj_id的“ comments”中最多记录100条记录:
db.indicators.aggregate([
{
"$lookup": {
"from": "comments",
"localField": "_id",
"foreignField": "obj_id",
"as": "match_docs"
}
}
])
我尝试了各种类型的$ limit,它似乎仅限制了整个结果的总数,而不仅限于联接。
1> Dan Karbayev..:
从MongoDB 3.6开始,您可以使用不相关的子查询来限制查找:
db.indicators.aggregate([
{ $lookup: {
from: 'comments',
as: 'match_docs',
let: { indicator_id: '$_id' },
pipeline: [
{ $match: {
$expr: { $eq: [ '$obj_id', '$$indicator_id' ] }
} },
// { $sort: { createdAt: 1 } }, // add sort if needed (for example, if you want first 100 comments by creation date)
{ $limit: 100 }
]
} }
])