如果有一个结果匹配,$limit是否会停止取数?

问题描述 投票:1回答:1

我不清楚$limit在聚合中的作用。我使用aggregation是因为我需要填充我的项目,但我不能在findOne中这样做(不知道为什么,但它总是什么也不返回)。

return Item.aggregate(
    [
        { $match: { _id: mongoose.Types.ObjectId(id) } },
        { $limit: 1 },
        {
            $lookup: {
                from: 'variations',
                localField: '_id',
                foreignField: 'item',
                as: 'variations'
            }
        }
    ]
).then(result => { console.log(result) });

在这种情况下,是当一个结果匹配时就停止获取,还是$limit只是从总结果中保留一个项目呢?

mongodb mongoose mongoose-schema mongoose-populate
1个回答
3
投票

$limit用来限制聚合管道中传递到下一阶段的项目数量。比如说你的$match阶段选择的记录是通过 { status : 'active' } 它产生了100万条记录,而你只需要前10条记录传到下一阶段,或者把这10条记录返回给客户,那么你就会添加一条 { $limit : 10 } 阶段。

但在你的情况下,因为你是通过objectId来匹配的,你不需要$limit阶段,因为objectIds是唯一的,而且只有一条记录有这个Id,所以你可以删除它。

你也不能使用 find 接口进行检索,因为它不允许你和另一个集合进行joinlookups,find接口是直接从单个集合中检索记录,所以你需要使用聚合框架进行查找等场景。

© www.soinside.com 2019 - 2024. All rights reserved.