如果一个结果匹配,$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 接口用于直接从单个集合中检索记录。所以需要在查询等场景下使用聚合框架