如果一个结果匹配,$limit 会停止获取吗?
Does $limit stop fetching if one result matched?
我不太清楚 $limit 的总和。我正在使用聚合,因为我需要填充我的项目,但我不能在 findOne 中执行此操作(不知道为什么,但它总是 return 没有)。
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 条记录传递到下一阶段或 return 这 10 条记录传递给客户端,然后你将添加{ $limit : 10 }
个阶段。
但在您的情况下,由于您是按 objectId 匹配的,因此不需要 $limit 阶段,因为 objectId 是唯一的,并且永远只有一条记录具有该 ID。所以你可以删除它。
您也不能使用 find
接口进行检索,因为它不允许您对另一个集合执行 joins/lookups。 find 接口用于直接从单个集合中检索记录。所以需要在查询等场景下使用聚合框架
我不太清楚 $limit 的总和。我正在使用聚合,因为我需要填充我的项目,但我不能在 findOne 中执行此操作(不知道为什么,但它总是 return 没有)。
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 条记录传递到下一阶段或 return 这 10 条记录传递给客户端,然后你将添加{ $limit : 10 }
个阶段。
但在您的情况下,由于您是按 objectId 匹配的,因此不需要 $limit 阶段,因为 objectId 是唯一的,并且永远只有一条记录具有该 ID。所以你可以删除它。
您也不能使用 find
接口进行检索,因为它不允许您对另一个集合执行 joins/lookups。 find 接口用于直接从单个集合中检索记录。所以需要在查询等场景下使用聚合框架