【问题标题】:Does $limit stop fetching if one result matched?如果一个结果匹配,$limit 会停止获取吗?
【发布时间】:2020-08-08 17:51:10
【问题描述】:

我不清楚 $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 只保留总结果中的一项? 在第二种情况下,如何在项目匹配时停止获取?

【问题讨论】:

    标签: mongodb mongoose mongoose-schema mongoose-populate


    【解决方案1】:

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

    但在您的情况下,由于您通过 objectId 进行匹配,因此您不需要 $limit 阶段,因为 objectIds 是唯一的,并且只会有一条具有该 ID 的记录。所以你可以删除它。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      相关资源
      最近更新 更多