首页 > 解决方案 > 找到第一个元素后停止搜索

问题描述

答案可能很简单,但我找不到:

我有这个管道

  return (await Blog.aggregate([
    { $limit: 1 },
    { $match: { _id } },
    {
      $lookup: {
        from: User.collection.name,
        localField: "author",
        foreignField: "_id",
        as: "author"
      }
    },
    {
      $unwind: "$author"
    },
    {
      $set: {
        author: "$author.author"
      }
    },
    {
      $project: {
        ips: 0
      }
    }
  ]).exec())[0]

我添加$limit到 1 是因为我认为它会在找到 1 后停止搜索元素。但搜索仅限于 1 个元素。

这意味着如果有 10 个元素,则只有第一个元素会被扫描,因为$limit1。

我该如何优化这条管道?

标签: mongodbmongoose

解决方案


只需将 $limit 阶段放在 $match 阶段之后,就可以了。


推荐阅读