MongoDB: запросить вложенные массивы с разбиением на страницы

Допустим, у меня есть коллекция следующих документов:

{
  _id,
  profile: {...},
  arrayProp1: [....],
  arrayProp2: [....],
  arrayProp3: [....],
  ...
}

Количество объектов в массивах arrayPropX может стать большим, не менее тысячи. Поэтому мне нужно использовать нумерацию страниц, и вопрос в том, как лучше всего это сделать?

Например, как вернуть:

  1. Общее количество элементов в arrayProp1 для указанного _id
  2. X элементов из позиции Y в arrayProp1 для указанного _id?

То же, что и выше, но с фильтром для некоторого поля в элементах arrayProp1?

Всего 1 ответ


Вам нужны два оператора: $ size и $ slice :

db.collection.aggregate([
    {
        $match: { _id: queryId }
    },
    {
        $project: {
            _id: 1,
            size: { $size: "$arrayProp1" } 
        }
    }
])

db.collection.aggregate([
    {
        $match: { _id: queryId }
    },
    {
        $project: {
            _id: 1,
            sliced: { $slice: ["$arrayProp1", Yposition, Xelements] } 
        }
    }
])

Есть идеи?

10000