我不清楚$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只是从总结果中保留一个项目呢?
$limit用来限制聚合管道中传递到下一阶段的项目数量。比如说你的$match阶段选择的记录是通过 { status : 'active' }
它产生了100万条记录,而你只需要前10条记录传到下一阶段,或者把这10条记录返回给客户,那么你就会添加一条 { $limit : 10 }
阶段。
但在你的情况下,因为你是通过objectId来匹配的,你不需要$limit阶段,因为objectIds是唯一的,而且只有一条记录有这个Id,所以你可以删除它。
你也不能使用 find
接口进行检索,因为它不允许你和另一个集合进行joinlookups,find接口是直接从单个集合中检索记录,所以你需要使用聚合框架进行查找等场景。