MongoDB Aggregate - получить общее количество и пропустить в одном конвейере - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь получить общее количество документов, которые соответствуют моим операторам конвейера, и затем после того, как я получу это количество всех них, я хотел бы использовать $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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...