MongoDB聚合-在一个管道中获取总数并跳过

时间:2020-04-17 14:57:59

标签: mongodb mongoose

我试图获取与管道运算符匹配的文档总数,然后在获得所有计数之后,我想使用$skip$limit返回一个子集,用于分页。现在,我基本上进行了两次相同的汇总-一次获取所有匹配项的计数,一次进行跳过/限制。 可以使用一个聚合管道来完成此操作吗?

要获得我的计数

let [count] = await MyModel.aggregate([
  {
    $match: {
      store: mongoose.Types.ObjectId(storeId),
    },
  },
  {
    $lookup: {
      from: "resaleitems",
      let: {
        store: "$store",
      },
      as: "itemsForSale",
      pipeline: [
        {
          $match: {
            $expr: {
              $eq: ["$store", "$$store"],
            },
          },
        },
      ],
    },
  },
  {
    $match: {
      "itemsForSale.0": { $exists: true },
    },
  },
  { $count: "totalCount" },
]).exec();

然后在获得跳过的有限结果之后,我基本上做了相同的事情,但是添加了$ skip和$ limit步骤

let items = await MyModel.aggregate([
  {
    $match: {
      store: mongoose.Types.ObjectId(storeId),
    },
  },
  { $skip: skip.toNumber() },
  { $limit: bnLimit.toNumber() },
  {
    $lookup: {
      from: "resaleitems",
      let: {
        store: "$store",
      },
      as: "itemsForSale",
      pipeline: [
        {
          $match: {
            $expr: {
              $eq: ["$store", "$$store"],
            },
          },
        },
      ],
    },
  },
  {
    $match: {
      "itemsForSale.0": { $exists: true },
    },
  },
]).exec();

0 个答案:

没有答案