MongoDB: запросить вложенные массивы с разбиением на страницы - PullRequest
1 голос
/ 23 марта 2020

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

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

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

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

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

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

1 Ответ

1 голос
/ 23 марта 2020

Вам нужно два оператора: размер $ и $ 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] } 
        }
    }
])
...