如果一个结果匹配,$limit是否停止提取



我不清楚$总共限制了什么。我使用聚合是因为我需要填充我的项目,但我不能在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只保留总结果中的一项?在第二种情况下,当项目匹配时,如何停止提取?

$limit用于限制在聚合管道中传递到下一阶段的项目数。假设您的$match阶段通过{ status : 'active' }选择了记录,它产生了100万条记录,并且您只需要将前10条记录传递到下一阶段,或者要将这10条记录返回给客户端,则需要添加{ $limit : 10 }阶段。

但在您的情况下,由于您是按objectId匹配的,因此您不需要$limit阶段,因为objectId是唯一的,并且只有一条记录具有该Id。因此您可以删除它。

此外,您不能使用find接口进行检索,因为它不允许您与另一个集合进行联接/查找。find接口用于直接从单个集合中检索记录。因此,您需要将聚合框架用于查找等场景。

最新更新