Spec-Zone.ru › Mongoose

Агрегирование

Aggregate()

Параметры:
  • [pipeline] «Массив» конвейер агрегирования в виде массива объектов
  • [model] «Модель» модель, используемая в этом агрегировании.
См.:
  • MongoDB
  • драйвер

Конструктор Aggregate используется для построения конвейеров агрегирования. Не создавайте этот класс напрямую, используйте Model.aggregate() вместо этого.

Пример:

const aggregate = Model.aggregate([
  { $project: { a: 1, b: 1 } },
  { $skip: 5 }
]);

Model.
  aggregate([{ $match: { age: { $gte: 21 }}}]).
  unwind('tags').
  exec();

Примечание:

  • Возвращаемые документы — обычные JavaScript-объекты, а не документы Mongoose (так как может возвращаться любой вид документа).

  • Mongoose не преобразует этапы конвейера. Следующее не сработает, если _id в базе данных не строка

    new Aggregate([{ $match: { _id: '00000000000000000000000a' } }]); // Вместо этого сделайте так, чтобы преобразование было в ObjectId new Aggregate([{ $match: { _id: new mongoose.Types.ObjectId('00000000000000000000000a') } }]);

Aggregate.prototype.addFields()

Параметры:
  • arg «Объект» спецификация поля
Возвращает:
  • «Агрегирование»
См.:
  • $addFields

Добавляет новый оператор $addFields в конвейер агрегирования. Требуется MongoDB v3.4+ для работы

Пример:

// adding new fields based on existing fields
aggregate.addFields({
    newField: '$b.nested'
  , plusTen: { $add: ['$val', 10]}
  , sub: {
       name: '$a'
    }
})

// etc
aggregate.addFields({ salary_k: { $divide: [ "$salary", 1000 ] } });

Aggregate.prototype.allowDiskUse()

Параметры:
  • value «Логическое» Указать серверу, что он может использовать жесткий диск для хранения данных во время агрегирования.
Возвращает:
  • «Агрегирование» this
См.:
  • mongodb

Устанавливает опцию allowDiskUse для запроса агрегирования

Пример:

await Model.aggregate([{ $match: { foo: 'bar' } }]).allowDiskUse(true);

Aggregate.prototype.append()

Параметры:
  • ...ops «Объект|Массив[Объект]» оператор(ы) для добавления. Может быть либо разброс объектов, либо один параметр массива объектов.
Возвращает:
  • «Агрегирование»

Добавляет новые операторы в конвейер агрегирования

Пример:

aggregate.append({ $project: { field: 1 }}, { $limit: 2 });

// or pass an array
const pipeline = [{ $match: { daw: 'Logic Audio X' }} ];
aggregate.append(pipeline);

Aggregate.prototype.catch()

Параметры:
  • [reject] «Функция»
Возвращает:
  • «Promise»

Выполняет агрегирование, возвращая Promise, которое будет разрешено с помощью документа(ов) или отклонено с ошибкой. Как и .then(), но принимает только обработчик отклонений. Совместимо с await.

Aggregate.prototype.collation()

Параметры:
  • collation «Объект» опции
Возвращает:
  • «Агрегирование» this
См.:
  • mongodb

Добавляет сортировку.

Пример:

const res = await Model.aggregate(pipeline).collation({ locale: 'en_US', strength: 1 });

Aggregate.prototype.count()

Параметры:
  • fieldName «Строка» Имя выходного поля, содержащего значение подсчета. Оно должно быть непустой строкой, не начинаться с $ и не содержать символ .
Возвращает:
  • «Агрегирование»
См.:
  • $count

Добавляет новый оператор $count в конвейер агрегирования.

Пример:

aggregate.count("userCount");

Aggregate.prototype.cursor()

Параметры:
  • options «Объект»
    • [options.batchSize] «Число» установить размер пакета курсора
    • [options.useMongooseAggCursor] «Логическое» использовать экспериментальный Mongoose-специфичный агрегирующий курсор (для eachAsync() и других семантик курсора запросов)
Возвращает:
  • «AggregationCursor» курсор, представляющий это агрегирование
См.:
  • mongodb

Устанавливает cursor и выполняет это агрегирование, возвращая агрегирующий курсор. Курсоры полезны, если вы хотите обрабатывать результаты агрегирования по одному, так как результат агрегирования слишком велик для размещения в памяти.

Пример:

const cursor = Model.aggregate(..).cursor({ batchSize: 1000 });
cursor.eachAsync(function(doc, i) {
  // use doc
});

Aggregate.prototype.densify()

Параметры:
  • arg «Объект» содержимое оператора $densify
Возвращает:
  • «Агрегирование»
См.:
  • $densify

Добавляет новый оператор $densify в конвейер агрегирования.

Пример:

 aggregate.densify({
   field: 'timestamp',
   range: {
     step: 1,
     unit: 'hour',
     bounds: [new Date('2021-05-18T00:00:00.000Z'), new Date('2021-05-18T08:00:00.000Z')]
   }
 });

Aggregate.prototype.exec()

Возвращает:
  • «Promise»

Выполняет конвейер агрегирования для текущей привязанной модели.

Пример:

const result = await aggregate.exec();

Aggregate.prototype.explain()

Параметры:
  • [verbosity] «Строка»
Возвращает:
  • «Promise»

Выполнить агрегирование с объяснением

Пример:

Model.aggregate(..).explain()

Aggregate.prototype.facet()

Параметры:
  • facet «Объект» опции
Возвращает:
  • «Агрегирование» this
См.:
  • $facet

Объединяет несколько конвейеров агрегирования.

Пример:

const res = await Model.aggregate().facet({
  books: [{ groupBy: '$author' }],
  price: [{ $bucketAuto: { groupBy: '$price', buckets: 2 } }]
});

// Output: { books: [...], price: [{...}, {...}] }

Aggregate.prototype.fill()

Параметры:
  • arg «Объект» содержимое оператора $fill
Возвращает:
  • «Агрегирование»
См.:
  • $fill

Добавляет новый оператор $fill в конвейер агрегирования.

Пример:

 aggregate.fill({
   output: {
     bootsSold: { value: 0 },
     sandalsSold: { value: 0 },
     sneakersSold: { value: 0 }
   }
 });

Aggregate.prototype.finally()

Параметры:
  • [onFinally] «Функция»
Возвращает:
  • «Promise»

Выполняет агрегирование, возвращая Promise, которое будет разрешено с .finally() сцеплённым.

Подробнее о Promise finally() в JavaScript.

Aggregate.prototype.graphLookup()

Параметры:
  • options «Объект» для $graphLookup, как описано в ссылке выше
Возвращает:
  • «Агрегирование»
См.:
  • $graphLookup

Добавляет новые пользовательские операторы $graphLookup в конвейер агрегирования, выполняя рекурсивный поиск в коллекции.

Обратите внимание, что graphLookup может потреблять не более 100 МБ памяти и не позволяет использовать диск, даже если { allowDiskUse: true } указано.

Пример:

 // Suppose we have a collection of courses, where a document might look like `{ _id: 0, name: 'Calculus', prerequisite: 'Trigonometry'}` and `{ _id: 0, name: 'Trigonometry', prerequisite: 'Algebra' }`
 aggregate.graphLookup({ from: 'courses', startWith: '$prerequisite', connectFromField: 'prerequisite', connectToField: 'name', as: 'prerequisites', maxDepth: 3 }) // this will recursively search the 'courses' collection up to 3 prerequisites

Aggregate.prototype.group()

Параметры:
  • arg «Объект» содержимое оператора $group
Возвращает:
  • «Агрегирование»
См.:
  • $group

Добавляет новый пользовательский оператор $group в конвейер агрегирования.

Пример:

aggregate.group({ _id: "$department" });

Aggregate.prototype.hint()

Параметры:
  • value «Объект|Строка» объект с подсказкой или имя индекса
Возвращает:
  • «Агрегирование» this
См.:
  • mongodb

Устанавливает параметр подсказки для запроса агрегации

Пример:

Model.aggregate(..).hint({ qty: 1, category: 1 }).exec();

Aggregate.prototype.limit()

Параметры:
  • num «Число» максимальное количество записей для передачи на следующую стадию
Возвращает:
  • «Агрегирование»
См.:
  • $limit

Добавляет новый оператор $limit в этот агрегированный конвейер.

Пример:

aggregate.limit(10);

Aggregate.prototype.lookup()

Параметры:
  • options «Объект» для $lookup, как описано в ссылке выше
Возвращает:
  • «Агрегирование»
См.:
  • $lookup

Добавляет новый пользовательский оператор $lookup в этот агрегированный конвейер.

Пример:

aggregate.lookup({ from: 'users', localField: 'userId', foreignField: '_id', as: 'users' });

Aggregate.prototype.match()

Параметры:
  • arg «Объект» содержимое оператора $match
Возвращает:
  • «Агрегирование»
См.:
  • $match

Добавляет новый пользовательский оператор $match в этот агрегированный конвейер.

Пример:

aggregate.match({ department: { $in: [ "sales", "engineering" ] } });

Aggregate.prototype.model()

Параметры:
  • [model] «Модель» Установить модель, связанную с этой агрегацией. Если не указано, возвращает уже сохраненную модель.
Возвращает:
  • «Модель»

Получить/установить модель, на которой будет выполняться эта агрегация.

Пример:

const aggregate = MyModel.aggregate([{ $match: { answer: 42 } }]);
aggregate.model() === MyModel; // true

// Change the model. There's rarely any reason to do this.
aggregate.model(SomeOtherModel);
aggregate.model() === SomeOtherModel; // true

Aggregate.prototype.near()

Параметры:
  • arg «Объект»
Возвращает:
  • «Агрегирование»
См.:
  • $geoNear

Добавляет новый оператор $geoNear в этот агрегированный конвейер.

Примечание:

ОБЯЗАТЕЛЬНО использовать в качестве первого оператора в конвейере.

Пример:

aggregate.near({
  near: { type: 'Point', coordinates: [40.724, -73.997] },
  distanceField: "dist.calculated", // required
  maxDistance: 0.008,
  query: { type: "public" },
  includeLocs: "dist.location",
  spherical: true,
});

Aggregate.prototype.option()

Параметры:
  • options «Объект» ключи для слияния с текущими параметрами
    • [options.maxTimeMS] «Число» число, ограничивает время выполнения этой агрегации, см. документацию MongoDB по maxTimeMS
    • [options.allowDiskUse] «Булево» если true, сервер MongoDB будет использовать жесткий диск для хранения данных во время этой агрегации
    • [options.collation] «Объект» объект, см. Aggregate.prototype.collation()
    • [options.session] «ClientSession» ClientSession, см. Aggregate.prototype.session()
Возвращает:
  • «Агрегирование» this
См.:
  • mongodb

Позволяет устанавливать произвольные параметры для middleware или плагинов.

Пример:

const agg = Model.aggregate(..).option({ allowDiskUse: true }); // Set the `allowDiskUse` option
agg.options; // `{ allowDiskUse: true }`

Aggregate.prototype.options

Тип:
  • «свойство»

Содержит параметры, переданные команде aggregate. Поддерживаемые параметры:

  • allowDiskUse
  • bypassDocumentValidation
  • collation
  • comment
  • cursor
  • explain
  • fieldsAsRaw
  • hint
  • let
  • maxTimeMS
  • raw
  • readConcern
  • readPreference
  • session
  • writeConcern

Aggregate.prototype.pipeline()

Возвращает:
  • «Массив» Текущий конвейер, похожий на операцию, которая будет выполнена

Возвращает текущий конвейер

Пример:

MyModel.aggregate().match({ test: 1 }).pipeline(); // [{ $match: { test: 1 } }]

Aggregate.prototype.project()

Параметры:
  • arg «Объект|Строка» спецификация поля
Возвращает:
  • «Агрегирование»
См.:
  • проектирование

Добавляет новый оператор $project в этот агрегированный конвейер.

Также поддерживается синтаксис выбора запроса Mongoose синтаксис выбора.

Пример:

// include a, include b, exclude _id
aggregate.project("a b -_id");

// or you may use object notation, useful when
// you have keys already prefixed with a "-"
aggregate.project({a: 1, b: 1, _id: 0});

// reshaping documents
aggregate.project({
    newField: '$b.nested'
  , plusTen: { $add: ['$val', 10]}
  , sub: {
       name: '$a'
    }
})

// etc
aggregate.project({ salary_k: { $divide: [ "$salary", 1000 ] } });

Aggregate.prototype.read()

Параметры:
  • pref «Строка|ReadPreference» один из перечисленных вариантов предпочтений или их псевдонимы
  • [tags] «Массив» необязательные теги для этого запроса. УСТАРЕЛО
Возвращает:
  • «Агрегирование» this
См.:
  • mongodb

Устанавливает параметр readPreference для запроса агрегации.

Пример:

await Model.aggregate(pipeline).read('primaryPreferred');

Aggregate.prototype.readConcern()

Параметры:
  • level «Строка» один из перечисленных уровней readConcern или их псевдонимы
Возвращает:
  • «Агрегирование» this
См.:
  • mongodb

Устанавливает уровень readConcern для запроса агрегации.

Пример:

await Model.aggregate(pipeline).readConcern('majority');

Aggregate.prototype.redact()

Параметры:
  • expression «Объект» параметры redact или условное выражение
  • [thenExpr] «Строка|Объект» истинное значение для условия
  • [elseExpr] «Строка|Объект» ложное значение для условия
Возвращает:
  • «Агрегирование» this
См.:
  • $redact

Добавляет новый оператор $redact в этот агрегированный конвейер.

Если передано 3 аргумента, Mongoose обернёт их с помощью оператора $cond if-then-else соответственно. Если thenExpr или elseExpr это строки, убедитесь, что они начинаются с $$, например $$DESCEND, $$PRUNE или $$KEEP.

Пример:

await Model.aggregate(pipeline).redact({
  $cond: {
    if: { $eq: [ '$level', 5 ] },
    then: '$$PRUNE',
    else: '$$DESCEND'
  }
});

// $redact often comes with $cond operator, you can also use the following syntax provided by mongoose
await Model.aggregate(pipeline).redact({ $eq: [ '$level', 5 ] }, '$$PRUNE', '$$DESCEND');

Aggregate.prototype.replaceRoot()

Параметры:
  • newRoot «Строка|Объект» поле или документ, который станет новым корневым документом
Возвращает:
  • «Агрегирование»
См.:
  • $replaceRoot

Добавляет новый оператор $replaceRoot в этот агрегированный конвейер.

Обратите внимание, что оператор $replaceRoot требует, чтобы строковые поля начинались с '$'. Если вы передаёте строку, Mongoose добавит '$' в начало, если указанное поле не начинается с '$'. Если вы передаёте объект, строки в вашем выражении не будут изменены.

Пример:

aggregate.replaceRoot("user");

aggregate.replaceRoot({ x: { $concat: ['$this', '$that'] } });

Aggregate.prototype.sample()

Параметры:
  • size «Число» количество случайных документов для выбора
Возвращает:
  • «Агрегирование»
См.:
  • $sample

Добавляет новый пользовательский оператор $sample в этот агрегированный конвейер.

Пример:

aggregate.sample(3); // Add a pipeline that picks 3 random documents

Aggregate.prototype.search()

Параметры:
  • $search «Объект» параметры
Возвращает:
  • «Агрегирование» this
См.:
  • $search

Справочный инструмент для стадии $search в поиске текста Atlas.

Пример:

const res = await Model.aggregate().
 search({
   text: {
     query: 'baseball',
     path: 'plot'
   }
 });

// Output: [{ plot: '...', title: '...' }]

Aggregate.prototype.session()

Параметры:
  • session «ClientSession»
Возвращает:
  • «Aggregate» this
См.:
  • mongodb

Устанавливает сеанс для этой агрегации. Полезно для транзакций.

Пример:

const session = await Model.startSession();
await Model.aggregate(..).session(session);

Aggregate.prototype.skip()

Параметры:
  • num «Число» количество записей для пропуска перед следующей стадией
Возвращает:
  • «Aggregate»
См.:
  • $skip

Добавляет новый оператор $skip в этот агрегируемый конвейер.

Пример:

aggregate.skip(10);

Aggregate.prototype.sort()

Параметры:
  • arg «Объект|Строка»
Возвращает:
  • «Aggregate» this
См.:
  • $sort

Добавляет новый оператор $sort в этот агрегируемый конвейер.

Если передан объект, разрешенные значения: asc, desc, ascending, descending, 1, и -1.

Если передана строка, она должна быть списком имён путей, разделённых пробелами. Порядок сортировки каждого пути восходящий, если имя пути не начинается с -, которое будет интерпретировано как нисходящий.

Пример:

// these are equivalent
aggregate.sort({ field: 'asc', test: -1 });
aggregate.sort('field -test');

Aggregate.prototype.sortByCount()

Параметры:
  • arg «Объект|Строка»
Возвращает:
  • «Aggregate» this
См.:
  • $sortByCount

Добавляет новый оператор $sortByCount в этот агрегируемый конвейер. Принимает либо имя поля в виде строки, либо объект конвейера.

Обратите внимание, что оператор $sortByCount требует, чтобы новое корневое значение начиналось с '$'. Mongoose добавит '$', если указанное имя поля не начинается с '$'.

Пример:

aggregate.sortByCount('users');
aggregate.sortByCount({ $mergeObjects: [ "$employee", "$business" ] })

Aggregate.prototype.then()

Параметры:
  • [resolve] «Функция» successCallback
  • [reject] «Функция» errorCallback
Возвращает:
  • «Promise»

Обеспечивает функцию, похожую на Promise, then, которая вызовет .exec без обратного вызова. Совместима с await.

Пример:

Model.aggregate(..).then(successCallback, errorCallback);

Aggregate.prototype.unionWith()

Параметры:
  • options «Объект» для запроса $unionWith, как описано в ссылке выше
Возвращает:
  • «Aggregate»
См.:
  • $unionWith

Добавляет новый оператор $unionWith в этот агрегируемый конвейер.

Пример:

aggregate.unionWith({ coll: 'users', pipeline: [ { $match: { _id: 1 } } ] });

Aggregate.prototype.unwind()

Параметры:
  • fields «Строка|Объект|Массив[Строка]|Массив[Объект]» поле(я) для разворачивания, либо как имена полей, либо как объекты с опциями. Если передаётся строка, префикс '$' для имени поля необязателен. Если передаётся объект, path должно начинаться с '$'.
Возвращает:
  • «Aggregate»
См.:
  • $unwind

Добавляет новый пользовательский оператор $unwind в этот агрегируемый конвейер.

Обратите внимание, что оператор $unwind требует, чтобы имя пути начиналось с '$'. Mongoose добавит '$', если указанное поле не начинается с '$'.

Пример:

aggregate.unwind("tags");
aggregate.unwind("a", "b", "c");
aggregate.unwind({ path: '$tags', preserveNullAndEmptyArrays: true });

Aggregate.prototype[Symbol.asyncIterator]()

Возвращает asyncIterator для использования в for/await/of циклах. Вам не нужно вызывать эту функцию явно, движок JavaScript вызовет её за вас.

Пример:

const agg = Model.aggregate([{ $match: { age: { $gte: 25 } } }]);
for await (const doc of agg) {
  console.log(doc.name);
}

Node.js 10.x поддерживает async iterators напрямую без флагов. Вы можете включить async iterators в Node.js 8.x с помощью --harmony_async_iteration флага.

Примечание: Эта функция не устанавливается, если Symbol.asyncIterator не определено. Если Symbol.asyncIterator не определено, это означает, что ваша версия Node.js не поддерживает async iterators.

© 2010 LearnBoost
Licensed under the MIT License.
https://mongoosejs.com/docs/api/aggregate.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API