Spec-Zone.ru › Mongoose

Модель

Модель()

Параметры:
  • doc «Объект» значения для начального набора
  • [fields] «Объект» необязательный объект, содержащий поля, которые были выбраны в запросе, вернувшем этот документ. Вам не нужно устанавливать этот параметр, чтобы Mongoose обрабатывал вашу проекцию запроса.
  • [skipId=false] «Булево» необязательный булевый параметр. Если true, Mongoose не добавляет поле _id в документ.
Наследуется от:
  • «Документ»

Модель — это класс, являющийся вашим основным инструментом взаимодействия с MongoDB. Экземпляр модели называется Документом.

В Mongoose термин «Модель» относится к подклассам класса mongoose.Model. Вы не должны использовать класс mongoose.Model напрямую. Функции mongoose.model() и connection.model() создают подклассы mongoose.Model, как показано ниже.

Пример:

// `UserModel` is a "Model", a subclass of `mongoose.Model`.
const UserModel = mongoose.model('User', new Schema({ name: String }));

// You can use a Model to create new documents using `new`:
const userDoc = new UserModel({ name: 'Foo' });
await userDoc.save();

// You also use a model to create queries:
const userFromDb = await UserModel.findOne({ name: 'Foo' });

Модель.$where()

Параметры:
  • argument «Строка|Функция» — это строка JavaScript или анонимная функция
Возвращает:
  • «Запрос»
См.:
  • Запрос.$where

Создаёт запрос и задаёт условие $where.

Иногда вам нужно выполнять запросы в MongoDB с использованием JavaScript-выражений. Вы можете сделать это с помощью find({ $where: javascript }), или вы можете использовать сокращённый метод Mongoose $where через цепочку запросов или в модели Mongoose.

Blog.$where('this.username.indexOf("val") !== -1').exec(function (err, docs) {});

Модель.aggregate()

Параметры:
  • [pipeline] «Массив» конвейер агрегации в виде массива объектов
  • [options] «Объект» параметры агрегации
Возвращает:
  • «Агрегация»
См.:
  • Агрегация
  • MongoDB

Выполняет агрегацию по коллекции моделей.

Если передан callback, то aggregate выполняется и возвращается Promise. Если обратный вызов не передан, то возвращается сама aggregate.

Эта функция запускает следующий промежуточный код.

  • aggregate()

Пример:

// Find the max balance of all accounts
const res = await Users.aggregate([
  { $group: { _id: null, maxBalance: { $max: '$balance' }}},
  { $project: { _id: 0, maxBalance: 1 }}
]);

console.log(res); // [ { maxBalance: 98000 } ]

// Or use the aggregation pipeline builder.
const res = await Users.aggregate().
  group({ _id: null, maxBalance: { $max: '$balance' } }).
  project('-id maxBalance').
  exec();
console.log(res); // [ { maxBalance: 98 } ]

Примечание:

  • Mongoose не преобразует конвейеры агрегации в схему модели, потому что $project и $group операторы позволяют переопределять «форму» документов на любой стадии конвейера, что может привести к получению документов в несовместимом формате. Вы можете использовать плагин mongoose-cast-aggregation для включения минимального преобразования конвейеров агрегации.
  • Возвращаемые документы являются обычными JavaScript-объектами, а не документами Mongoose (поскольку может быть возвращена любая форма документа).

Подробнее об агрегациях:

  • Mongoose Aggregate
  • Введение в агрегацию Mongoose
  • Документация по агрегации MongoDB

Модель.applyDefaults()

Параметры:
  • obj «Объект|Документ» объект или документ, на котором нужно применить значения по умолчанию

Применяет значения по умолчанию к заданному документу или POJO.

Модель.bulkSave()

Параметры:
  • documents «Массив<Документ>»
  • [options] «Объект» параметры, передаваемые в базовую bulkWrite()
    • [options.timestamps] «Булево» по умолчанию null, при установке в false Mongoose не будет добавлять/обновлять временные метки в документы.
    • [options.session=null] «Сессия клиента» сессия, связанная с этим массовым записью. См. документацию по транзакциям.
    • [options.w=1] «Строка|число» уровень гарантии записи. См. Query#w() для получения дополнительной информации.
    • [options.wtimeout=null] «число» таймаут уровня гарантии записи.
    • [options.j=true] «Булево» Если false, отключение признания журнала

принимает массив документов, получает изменения и вставляет/обновляет документы в базе данных в зависимости от того, является ли документ новым или имеет изменения.

bulkSave использует bulkWrite под капотом, поэтому он в основном полезен при работе со многими документами (10 000+)

Модель.bulkWrite()

Параметры:
  • ops «Массив»
    • [ops.insertOne.document] «Объект» Вставляемый документ
    • [ops.updateOne.filter] «Объект» Обновление первого документа, соответствующего этому фильтру
    • [ops.updateOne.update] «Объект» Объект, содержащий операторы обновления
    • [ops.updateOne.upsert=false] «Булево» Если true, вставить документ, если ни один не соответствует
    • [ops.updateOne.timestamps=true] «Булево» Если false, не применять временные метки к операции
    • [ops.updateOne.collation] «Объект» Сортировка MongoDB для использования
    • [ops.updateOne.arrayFilters] «Массив» Фильтры массива, используемые в update
    • [ops.updateMany.filter] «Объект» Обновить все документы, соответствующие этому фильтру
    • [ops.updateMany.update] «Объект» Объект, содержащий операторы обновления
    • [ops.updateMany.upsert=false] «Булево» Если true, вставить документ, если ни один документ не соответствует filter
    • [ops.updateMany.timestamps=true] «Булево» Если false, не применять временные метки к операции
    • [ops.updateMany.collation] «Объект» Сортировка MongoDB для использования
    • [ops.updateMany.arrayFilters] «Массив» Фильтры массива, используемые в update
    • [ops.deleteOne.filter] «Объект» Удалить первый документ, соответствующий этому фильтру
    • [ops.deleteMany.filter] «Объект» Удалить все документы, соответствующие этому фильтру
    • [ops.replaceOne.filter] «Объект» Заменить первый документ, соответствующий этому фильтру
    • [ops.replaceOne.replacement] «Объект» Заменяющий документ
    • [ops.replaceOne.upsert=false] «Булево» Если true, вставить документ, если ни один документ не соответствует filter
  • [options] «Объект»
    • [options.ordered=true] «Булево» Если true, выполнить записи в порядке и остановиться на первой ошибке. Если false, выполнить записи параллельно и продолжать до тех пор, пока все записи не будут выполнены успешно или с ошибкой.
    • [options.session=null] «Сеанс клиента» Сеанс, связанный с этим массовым записыванием. См. документацию по транзакциям.
    • [options.w=1] «Строка|число» Обеспечение записи. См. Query#w() для получения дополнительной информации.
    • [options.wtimeout=null] «Число» Тайм-аут обеспечения записи.
    • [options.j=true] «Булево» Если false, отключить подтверждение журнала
    • [options.skipValidation=false] «Булево» Установите в значение true, чтобы пропустить проверку схемы Mongoose при массовом записи. В настоящее время Mongoose выполняет проверку по умолчанию для операций insertOne и replaceOne.
    • [options.bypassDocumentValidation=false] «Булево» Если true, отключить проверку схемы MongoDB на стороне сервера для всех записей в этом наборе.
    • [options.throwOnValidationError=false] «Булево» Если true и ordered: false, вызывать ошибку, если одна из операций не прошла проверку, но все допустимые операции были выполнены успешно.
    • [options.strict=null] «Булево» Перезаписывает strict параметр в схеме. Если false, позволяет фильтровать и записывать поля, не определенные в схеме, для всех записей в этом наборе.
Возвращает:
  • «Обещание» возвращает BulkWriteOpResult, если операция выполняется успешно

Отправляет несколько insertOne, updateOne, updateMany, replaceOne, deleteOne, и/или deleteMany операций на сервер MongoDB одной командой. Это быстрее, чем отправка нескольких независимых операций (например, если вы используете create()) , потому что с bulkWrite() требуется только один запрос к MongoDB.

Mongoose выполнит приведение типов для всех предоставленных операций.

Эта функция не запускает никакие middleware, ни save(), ни update(). Если вам необходимо запустить save() middleware для каждого документа, используйте create() вместо этого.

Пример:

Character.bulkWrite([
  {
    insertOne: {
      document: {
        name: 'Eddard Stark',
        title: 'Warden of the North'
      }
    }
  },
  {
    updateOne: {
      filter: { name: 'Eddard Stark' },
      // If you were using the MongoDB driver directly, you'd need to do
      // `update: { $set: { title: ... } }` but mongoose adds $set for
      // you.
      update: { title: 'Hand of the King' }
    }
  },
  {
    deleteOne: {
      filter: { name: 'Eddard Stark' }
    }
  }
]).then(res => {
 // Prints "1 1 1"
 console.log(res.insertedCount, res.modifiedCount, res.deletedCount);
});

Поддерживаемые операции:

  • insertOne
  • updateOne
  • updateMany
  • deleteOne
  • deleteMany
  • replaceOne

Model.castObject()

Параметры:
  • obj «Объект» объект или документ для приведения типов
  • options «Объект» параметры, передаваемые в castObject
  • options.ignoreCastErrors «Булево» Если установлено в true, не будет вызывать ValidationError и вернуть только значения, которые были успешно приведены к типу.

Приводит данный POJO к схеме модели

Пример:

const Test = mongoose.model('Test', Schema({ num: Number }));

const obj = Test.castObject({ num: '42' });
obj.num; // 42 as a number

Test.castObject({ num: 'not a number' }); // Throws a ValidationError

Model.cleanIndexes()

Параметры:
  • [callback] «Функция» необязательный обратный вызов
Возвращает:
  • «Обещание,undefined,void» Возвращает undefined если указан обратный вызов, возвращает обещание, если обратного вызова нет.

Удаляет все индексы, которые не определены в схеме этой модели. Используется syncIndexes().

Возвращаемое обещание разрешается до списка имен удалённых индексов в виде массива

Model.count()

~УСТАНОВЛЕНО~
Параметры:
  • [filter] «Объект»
Возвращает:
  • «Запрос»

Подсчитывает количество документов, которые соответствуют filter в коллекции базы данных.

Этот метод устарел. Если вы хотите подсчитать количество документов в коллекции, например count({}), используйте функцию estimatedDocumentCount() вместо этого. В противном случае используйте функцию countDocuments().

Пример:

const count = await Adventure.count({ type: 'jungle' });
console.log('there are %d jungle adventures', count);

Model.countDocuments()

Параметры:
  • filter «Объект»
Возвращает:
  • «Запрос»

Подсчитывает количество документов, соответствующих filter в коллекции базы данных.

Пример:

Adventure.countDocuments({ type: 'jungle' }, function (err, count) {
  console.log('there are %d jungle adventures', count);
});

Если вы хотите подсчитать все документы в большой коллекции, используйте функцию estimatedDocumentCount() вместо этого. Если вы вызываете countDocuments({}), MongoDB всегда выполнит полное сканирование коллекции и не будет использовать индексы.

Функция countDocuments() похожа на count(), но есть несколько операторов, которые countDocuments() не поддерживает. Ниже приведены операторы, которые count() поддерживает, но countDocuments() не поддерживает, и предлагаемые замены:

  • $where: $expr
  • $near: $geoWithin с $center
  • $nearSphere: $geoWithin с $centerSphere

Model.create()

Параметры:
  • docs «Array|Object» Документы для вставки, в виде разбросанных значений или массива
  • [options] «Object» Параметры, передаваемые в save(). Для указания options, docs обязательно должен быть массивом, а не разбросанными значениями. Смотрите Model.save для доступных параметров.
    • [options.ordered] «Boolean» сохраняет документы последовательно, а не параллельно.
    • [options.aggregateErrors] «Boolean» Агрегировать ошибки вместо выброса первой возникшей. По умолчанию: false
Возвращает:
  • «Promise»

Сокращенная запись для сохранения одного или нескольких документов в базе данных. MyModel.create(docs) выполняет new MyModel(doc).save() для каждого документа в docs.

Эта функция запускает следующий middleware.

  • save()

Пример:

// Insert one new `Character` document
await Character.create({ name: 'Jean-Luc Picard' });

// Insert multiple new `Character` documents
await Character.create([{ name: 'Will Riker' }, { name: 'Geordi LaForge' }]);

// Create a new character within a transaction. Note that you **must**
// pass an array as the first parameter to `create()` if you want to
// specify options.
await Character.create([{ name: 'Jean-Luc Picard' }], { session });

Model.createCollection()

Параметры:
  • [options] «Object» см. документацию драйвера MongoDB

Создает коллекцию для этой модели. По умолчанию, если индексы не указаны, mongoose не создаст коллекцию для модели, пока не будут созданы какие-либо документы. Используйте этот метод для явного создания коллекции.

Примечание 1: Вам может потребоваться вызвать его перед началом транзакции. См. https://www.mongodb.com/docs/manual/core/transactions/#transactions-and-operations

Примечание 2: Вам не нужно вызывать это, если ваша схема содержит индекс или уникальное поле. В этом случае просто используйте Model.init()

Пример:

const userSchema = new Schema({ name: String })
const User = mongoose.model('User', userSchema);

User.createCollection().then(function(collection) {
  console.log('Collection is created!');
});

Model.createIndexes()

Параметры:
  • [options] «Object» внутренние параметры
Возвращает:
  • «Promise»

Аналогично ensureIndexes(), за исключением того, что он использует функцию createIndex.

Model.db

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

Экземпляр подключения, используемый моделью.

Model.deleteMany()

Параметры:
  • conditions «Object»
  • [options] «Object» необязательно, см. Query.prototype.setOptions()
    • [options.translateAliases=null] «Boolean» Если установлено в true, преобразует любые определённые в схеме псевдонимы в filter, projection, update, и distinct. Выбрасывает ошибку, если есть конфликты, где и псевдоним, и исходное свойство определены в одном объекте.
Возвращает:
  • «Query»

Удаляет все документы, соответствующие conditions из коллекции. Возвращает объект со свойством deletedCount, содержащим количество удалённых документов. Ведёт себя как remove(), но удаляет все документы, соответствующие conditions независимо от параметра single.

Пример:

await Character.deleteMany({ name: /Stark/, age: { $gte: 18 } }); // returns {deletedCount: x} where x is the number of documents deleted.

Примечание:

Эта функция запускает хуки запросов deleteMany. Читайте документацию по middleware для получения дополнительной информации.

Model.deleteOne()

Параметры:
  • conditions «Object»
  • [options] «Object» необязательно, см. Query.prototype.setOptions()
    • [options.translateAliases=null] «Boolean» Если установлено в true, преобразует любые определённые в схеме псевдонимы в filter, projection, update, и distinct. Выбрасывает ошибку, если есть конфликты, где и псевдоним, и исходное свойство определены в одном объекте.
Возвращает:
  • «Query»

Удаляет первый документ, соответствующий conditions из коллекции. Возвращает объект со свойством deletedCount, указывающим, сколько документов было удалено. Ведёт себя как remove(), но удаляет не более одного документа независимо от параметра single.

Пример:

await Character.deleteOne({ name: 'Eddard Stark' }); // returns {deletedCount: 1}

Примечание:

Эта функция запускает хуки запросов deleteOne. Читайте документацию по middleware для получения дополнительной информации.

Model.diffIndexes()

Параметры:
  • [options] «Object»

Выполняет пробный запуск Model.syncIndexes(), то есть результат этой функции будет результатом Model.syncIndexes().

Model.discriminator()

Параметры:
  • name «String» имя модели-дискриминатора
  • schema «Schema» схема модели-дискриминатора
  • [options] «Object|String» Если строка, то то же, что и options.value.
    • [options.value] «String» строка, хранящаяся в свойстве discriminatorKey. Если не указано, Mongoose использует параметр name.
    • [options.clone=true] «Boolean» По умолчанию, discriminator() клонирует заданную schema. Установите в false чтобы пропустить клонирование.
    • [options.overwriteModels=false] «Boolean» По умолчанию, Mongoose не позволяет определять дискриминатор с тем же именем, что и другой дискриминатор. Установите это значение, чтобы разрешить перезапись дискриминаторов с одинаковым именем.
    • [options.mergeHooks=true] «Boolean» По умолчанию, Mongoose объединяет хуки базовой схемы с хуками схемы дискриминатора. Установите этот параметр в false чтобы Mongoose использовал хуки схемы дискриминатора вместо этого.
    • [options.mergePlugins=true] «Boolean» По умолчанию, Mongoose объединяет плагины базовой схемы с плагинами схемы дискриминатора. Установите этот параметр в false чтобы Mongoose использовал плагины схемы дискриминатора вместо этого.
Возвращает:
  • «Model» Новая созданная модель-дискриминатор

Добавляет тип дискриминатора.

Пример:

function BaseSchema() {
  Schema.apply(this, arguments);

  this.add({
    name: String,
    createdAt: Date
  });
}
util.inherits(BaseSchema, Schema);

const PersonSchema = new BaseSchema();
const BossSchema = new BaseSchema({ department: String });

const Person = mongoose.model('Person', PersonSchema);
const Boss = Person.discriminator('Boss', BossSchema);
new Boss().__t; // "Boss". `__t` is the default `discriminatorKey`

const employeeSchema = new Schema({ boss: ObjectId });
const Employee = Person.discriminator('Employee', employeeSchema, 'staff');
new Employee().__t; // "staff" because of 3rd argument above

Model.distinct()

Параметры:
  • field «String»
  • [conditions] «Object» необязательно
Возвращает:
  • «Query»

Создаёт запрос для операции distinct.

Пример:

const query = Link.distinct('url');
query.exec();

Model.ensureIndexes()

Параметры:
  • [options] «Object» внутренние параметры
Возвращает:
  • «Promise»

Отправляет команды createIndex в mongo для каждого индекса, объявленного в схеме. Команды createIndex отправляются последовательно.

Пример:

Event.ensureIndexes(function (err) {
  if (err) return handleError(err);
});

После завершения, событие index генерируется на этом Model, передавая ошибку, если она произошла.

Пример:

const eventSchema = new Schema({ thing: { type: 'string', unique: true } })
const Event = mongoose.model('Event', eventSchema);

Event.on('index', function (err) {
  if (err) console.error(err); // error occurred during index creation
})

ПРИМЕЧАНИЕ: Не рекомендуется использовать это в продакшене. Создание индексов может повлиять на производительность базы данных в зависимости от вашей нагрузки. Используйте с осторожностью.

Model.estimatedDocumentCount()

Параметры:
  • [options] «Object»
Возвращает:
  • «Query»

Оценивает количество документов в коллекции MongoDB. Быстрее, чем использование countDocuments() для больших коллекций, потому что estimatedDocumentCount() использует метаданные коллекции, а не сканирует всю коллекцию.

Пример:

const numAdventures = await Adventure.estimatedDocumentCount();

Model.events

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

Эмиттер событий, который сообщает об любых возникших ошибках. Полезен для обработки глобальных ошибок.

Пример:

MyModel.events.on('error', err => console.log(err.message));

// Prints a 'CastError' because of the above handler
await MyModel.findOne({ _id: 'Not a valid ObjectId' }).catch(noop);

Model.exists()

Параметры:
  • filter «Object»
  • [options] «Object» необязательно, см. Query.prototype.setOptions()
Возвращает:
  • «Query»

Возвращает документ с _id только если в базе данных существует хотя бы один документ, соответствующий заданному filter, и null в противном случае.

Внутри MyModel.exists({ answer: 42 }) эквивалентно MyModel.findOne({ answer: 42 }).select({ _id: 1 }).lean()

Пример:

await Character.deleteMany({});
await Character.create({ name: 'Jean-Luc Picard' });

await Character.exists({ name: /picard/i }); // { _id: ... }
await Character.exists({ name: /riker/i }); // null

Эта функция запускает следующий middleware.

  • findOne()

Model.find()

Параметры:
  • filter «Объект|ObjectId»
  • [projection] «Объект|Строка|Массив[Строка]» необязательные поля для возврата, см. Query.prototype.select()
  • [options] «Объект» необязательно, см. Query.prototype.setOptions()
    • [options.translateAliases=null] «Булево» Если установлено в true, переводит любые псевдонимы, определённые схемой, в filter, projection, update, и distinct. Выбрасывает ошибку, если есть конфликты, где и псевдоним, и исходное свойство определены в одном и том же объекте.
Возвращает:
  • «Запрос»
См.:
  • выбор полей
  • преобразование запросов

Находит документы.

Mongoose преобразует filter для соответствия схеме модели перед отправкой команды. См. наш учебник по преобразованию запросов для получения дополнительной информации о том, как Mongoose преобразует filter.

Пример:

// find all documents
await MyModel.find({});

// find all documents named john and at least 18
await MyModel.find({ name: 'john', age: { $gte: 18 } }).exec();

// executes, name LIKE john and only selecting the "name" and "friends" fields
await MyModel.find({ name: /john/i }, 'name friends').exec();

// passing options
await MyModel.find({ name: /john/i }, null, { skip: 10 }).exec();

Model.findById()

Параметры:
  • id «Любой» значение _id для поиска
  • [projection] «Объект|Строка|Массив[Строка]» необязательные поля для возврата, см. Query.prototype.select()
  • [options] «Объект» необязательно, см. Query.prototype.setOptions()
Возвращает:
  • «Запрос»
См.:
  • выбор полей
  • запросы lean
  • findById в Mongoose

Находит один документ по полю _id. findById(id) почти* эквивалентен findOne({ _id: id }). Если вы хотите искать по полю документа _id, используйте findById() вместо findOne().

id преобразуется на основе схемы перед отправкой команды.

Эта функция запускает следующий middleware.

  • findOne()

* За исключением обработки undefined. Если вы используете findOne(), вы увидите, что findOne(undefined) и findOne({ _id: undefined }) эквивалентны findOne({}) и возвращают произвольные документы. Однако mongoose преобразует findById(undefined) в findOne({ _id: null }).

Пример:

// Find the adventure with the given `id`, or `null` if not found
await Adventure.findById(id).exec();

// select only the adventures name and length
await Adventure.findById(id, 'name length').exec();

Model.findByIdAndDelete()

Параметры:
  • id «Объект|Число|Строка» значение _id для поиска
  • [options] «Объект» необязательно, см. Query.prototype.setOptions()
    • [options.strict] «Булево|Строка» перезаписывает опцию строгого режима схемы строгого режима
    • [options.translateAliases=null] «Булево» Если установлено в true, переводит любые псевдонимы, определённые схемой, в filter, projection, update, и distinct. Выбрасывает ошибку, если есть конфликты, где и псевдоним, и исходное свойство определены в одном и том же объекте.
Возвращает:
  • «Запрос»
См.:
  • Model.findOneAndRemove
  • mongodb

Выполняет команду MongoDB findOneAndDelete() по полю _id документа. Другими словами, findByIdAndDelete(id) — это сокращение для findOneAndDelete({ _id: id }).

Эта функция запускает следующий middleware.

  • findOneAndDelete()

Model.findByIdAndRemove()

Параметры:
  • id «Объект|Число|Строка» значение _id для поиска
  • [options] «Объект» необязательно, см. Query.prototype.setOptions()
    • [options.strict] «Булево|Строка» перезаписывает опцию строгого режима схемы строгого режима
    • [options.session=null] «Сессия клиента» Сессия, связанная с этим запросом. См. документацию по транзакциям.
    • [options.projection=null] «Объект|Строка|Массив[Строка]» необязательные поля для возврата, см. Query.prototype.select()
    • [options.sort] «Объект|Строка» если найдено несколько документов, устанавливает порядок сортировки для выбора документа для обновления.
    • [options.rawResult] «Булево» если true, возвращает сырой результат из драйвера MongoDB
    • [options.select] «Объект|Строка» устанавливает поля документа, которые нужно вернуть.
    • [options.translateAliases=null] «Булево» Если установлено в true, переводит любые псевдонимы, определённые схемой, в filter, projection, update, и distinct. Выбрасывает ошибку, если есть конфликты, где и псевдоним, и исходное свойство определены в одном и том же объекте.
Возвращает:
  • «Запрос»
См.:
  • Model.findOneAndRemove
  • mongodb

Выполняет команду mongodb findOneAndRemove по полю _id документа. findByIdAndRemove(id, ...) эквивалентно findOneAndRemove({ _id: id }, ...).

Находит соответствующий документ, удаляет его и возвращает найденный документ (если есть).

Эта функция запускает следующий middleware.

  • findOneAndRemove()

Пример:

A.findByIdAndRemove(id, options)  // return Query
A.findByIdAndRemove(id) // returns Query
A.findByIdAndRemove()           // returns Query

Model.findByIdAndUpdate()

Параметры:
  • id «Объект|Число|Строка» значение _id для запроса
  • [update] «Объект»
  • [options] «Объект» необязательно, см. Query.prototype.setOptions()
    • [options.returnDocument='before'] «Строка» Имеет два возможных значения, 'before' и 'after'. По умолчанию возвращает документ до применения обновления.
    • [options.lean] «Объект» если истинно, mongoose вернёт документ как обычный JavaScript-объект, а не документ mongoose. См. Query.lean() и учебник Mongoose по lean.
    • [options.session=null] «ClientSession» Сессия, связанная с этим запросом. См. документацию по транзакциям.
    • [options.strict] «Булево|Строка» перезаписывает опцию строгого режима схемы
    • [options.timestamps=null] «Булево» Если установлено false, и включены временные метки на уровне схемы, пропустить временные метки для этого обновления. Обратите внимание, что это позволяет перезаписать временные метки. Не делает ничего, если временные метки на уровне схемы не заданы.
    • [options.overwrite=false] «Булево» По умолчанию, если вы не включаете операторы обновления в update, Mongoose обернёт update в $set за вас. Это предотвращает случайное перезаписывание документа. Эта опция говорит Mongoose пропустить добавление $set. Альтернативой этому является использование Model.findOneAndReplace({ _id: id }, update, options).
    • [options.sort] «Объект|Строка» если по условиям найдено несколько документов, задаёт порядок сортировки, чтобы выбрать, какой документ обновить.
    • [options.runValidators] «Булево» если true, выполняет валидаторы обновлений для этой команды. Валидаторы обновлений проверяют операцию обновления по схеме модели.
    • [options.setDefaultsOnInsert=true] «Булево» Если setDefaultsOnInsert и upsert истинны, mongoose применит значения по умолчанию, указанные в схеме модели, если создаётся новый документ.
    • [options.rawResult] «Булево» если true, возвращает сырой результат из драйвера MongoDB
    • [options.upsert=false] «Булево» если true, и документы не найдены, вставить новый документ
    • [options.new=false] «Булево» если true, вернуть изменённый документ, а не исходный
    • [options.select] «Объект|Строка» устанавливает поля документа для возврата.
    • [options.translateAliases=null] «Булево» Если установлено true, переводит любые псевдонимы, определённые в схеме, в filter, projection, update, и distinct. Выбрасывает ошибку, если есть конфликты, где псевдоним и исходное свойство определены в одном объекте.
Возвращает:
  • «Запрос»
См.:
  • Model.findOneAndUpdate
  • mongodb

Выполняет команду mongodb findOneAndUpdate по полю _id документа. findByIdAndUpdate(id, ...) эквивалентно findOneAndUpdate({ _id: id }, ...).

Ищет соответствующий документ, обновляет его согласно аргументу update, передавая любые options, и возвращает найденный документ (если есть).

Эта функция запускает следующий middleware.

  • findOneAndUpdate()

Пример:

A.findByIdAndUpdate(id, update, options)  // returns Query
A.findByIdAndUpdate(id, update)           // returns Query
A.findByIdAndUpdate()                     // returns Query

Примечание:

Все ключи обновления верхнего уровня, которые не являются именами операций atomic, обрабатываются как операции set:

Пример:

Model.findByIdAndUpdate(id, { name: 'jason bourne' }, options)

// is sent as
Model.findByIdAndUpdate(id, { $set: { name: 'jason bourne' }}, options)

Это помогает предотвратить случайное перезаписывание документа с { name: 'jason bourne' }. Чтобы предотвратить это поведение, см. опцию overwrite

Примечание:

Функции findOneAndX и findByIdAndX поддерживают ограниченную валидацию. Включить валидацию можно, установив опцию runValidators.

Если вам нужна полная валидация, воспользуйтесь традиционным подходом, сначала извлеките документ.

const doc = await Model.findById(id)
doc.name = 'jason bourne';
await doc.save();

Model.findOne()

Параметры:
  • [conditions] «Объект»
  • [projection] «Объект|Строка|Массив[Строка]» необязательные поля для возврата, см. Query.prototype.select()
  • [options] «Объект» необязательно, см. Query.prototype.setOptions()
    • [options.translateAliases=null] «Булево» Если установлено true, переводит любые псевдонимы, определённые в схеме, в filter, projection, update, и distinct. Выбрасывает ошибку, если есть конфликты, где псевдоним и исходное свойство определены в одном объекте.
Возвращает:
  • «Запрос»
См.:
  • выбор полей
  • lean-запросы

Ищет один документ.

conditions преобразуются в соответствующие типы схем перед отправкой команды.

Примечание: conditions необязательно, и если conditions равно null или undefined, mongoose отправит пустую команду findOne в MongoDB, которая вернёт произвольный документ. Если вы ищете по _id, используйте findById().

Пример:

// Find one adventure whose `country` is 'Croatia', otherwise `null`
await Adventure.findOne({ country: 'Croatia' }).exec();

// Model.findOne() no longer accepts a callback

// Select only the adventures name and length
await Adventure.findOne({ country: 'Croatia' }, 'name length').exec();

Model.findOneAndDelete()

Параметры:
  • conditions «Объект»
  • [options] «Объект» необязательно, см. Query.prototype.setOptions()
    • [options.strict] «Булево|Строка» перезаписывает опцию строгого режима схемы
    • [options.projection=null] «Объект|Строка|Массив[Строка]» необязательные поля для возврата, см. Query.prototype.select()
    • [options.session=null] «ClientSession» Сессия, связанная с этим запросом. См. документацию по транзакциям.
    • [options.rawResult] «Булево» если true, возвращает сырой результат из драйвера MongoDB
    • [options.sort] «Объект|Строка» если по условиям найдено несколько документов, задаёт порядок сортировки, чтобы выбрать, какой документ обновить.
    • [options.select] «Объект|Строка» устанавливает поля документа для возврата.
    • [options.maxTimeMS] «Число» устанавливает временной лимит на запрос - требует mongodb >= 2.6.0
    • [options.translateAliases=null] «Булево» Если установлено true, переводит любые псевдонимы, определённые в схеме, в filter, projection, update, и distinct. Выбрасывает ошибку, если есть конфликты, где псевдоним и исходное свойство определены в одном объекте.
Возвращает:
  • «Запрос»

Выполняет команду MongoDB findOneAndDelete().

Находит соответствующий документ, удаляет его и возвращает найденный документ (если есть).

Эта функция запускает следующий middleware.

  • findOneAndDelete()

Эта функция отличается от Model.findOneAndRemove() тем, что findOneAndRemove() становится командой MongoDB findAndModify(), в отличие от команды findOneAndDelete(). Для большинства случаев использования mongoose это различие несущественно. Следует использовать findOneAndDelete() , если нет особых причин для другого.

Пример:

A.findOneAndDelete(conditions, options)  // return Query
A.findOneAndDelete(conditions) // returns Query
A.findOneAndDelete()           // returns Query

Функции findOneAndX и findByIdAndX поддерживают ограниченную валидацию. Включить валидацию можно, установив опцию runValidators.

Если вам нужна полная валидация, воспользуйтесь традиционным подходом, сначала извлеките документ.

const doc = await Model.findById(id)
doc.name = 'jason bourne';
await doc.save();

Model.findOneAndRemove()

Параметры:
  • conditions «Объект»
  • [options] «Объект» необязательно, см. Query.prototype.setOptions()
    • [options.session=null] «ClientSession» Сессия, связанная с этим запросом. См. документацию по транзакциям.
    • [options.strict] «Булево значение или строка» перезаписывает опцию строгого режима схемы опцию строгого режима
    • [options.projection=null] «Объект, строка или массив строк» необязательные поля для возврата, см. Query.prototype.select()
    • [options.sort] «Объект или строка» если по условиям найдено несколько документов, устанавливает порядок сортировки для выбора документа для обновления.
    • [options.rawResult] «Булево значение» если true, возвращает исходный результат из драйвера MongoDB
    • [options.select] «Объект или строка» задаёт поля документа для возврата.
    • [options.maxTimeMS] «Число» устанавливает временной лимит на запрос — требует mongodb >= 2.6.0
    • [options.translateAliases=null] «Булево значение» Если установлено true, переводит любые определённые схемой псевдонимы в filter, projection, update, и distinct. Выбрасывает ошибку, если существуют конфликты, где и псевдоним, и исходное свойство определены в одном объекте.
Возвращаемое значение:
  • «Query»
См. также:
  • mongodb

Выполняет команду mongodb findOneAndRemove.

Находит соответствующий документ, удаляет его и возвращает найденный документ (если таковой имеется).

Эта функция запускает следующий middleware.

  • findOneAndRemove()

Пример:

A.findOneAndRemove(conditions, options)  // return Query
A.findOneAndRemove(conditions) // returns Query
A.findOneAndRemove()           // returns Query

findOneAndX и findByIdAndX функции поддерживают ограниченную валидацию. Вы можете включить валидацию, установив опцию runValidators.

Если вам нужна полная валидация, используйте традиционный подход, сначала извлеките документ.

const doc = await Model.findById(id);
doc.name = 'jason bourne';
await doc.save();

Model.findOneAndReplace()

Параметры:
  • filter «Объект» Заменяет первый документ, соответствующий этому фильтру
  • [replacement] «Объект» Заменять этим документом
  • [options] «Объект» необязательно, см. Query.prototype.setOptions()
    • [options.returnDocument='before'] «Строка» Имеет два возможных значения, 'before' и 'after'. По умолчанию возвращает документ до применения обновления.
    • [options.lean] «Объект» если имеет истинное значение, mongoose вернёт документ как обычный JavaScript-объект, а не как документ mongoose. См. Query.lean() и учебник по Mongoose lean.
    • [options.session=null] «ClientSession» Сессия, связанная с этим запросом. См. документацию по транзакциям.
    • [options.strict] «Булево значение или строка» перезаписывает опцию строгого режима схемы опцию строгого режима
    • [options.timestamps=null] «Булево значение» Если установлено false и включены временные метки на уровне схемы, пропустить временные метки для этого обновления. Обратите внимание, что это позволяет перезаписывать временные метки. Ничего не делает, если временные метки на уровне схемы не установлены.
    • [options.projection=null] «Объект, строка или массив строк» необязательные поля для возврата, см. Query.prototype.select()
    • [options.sort] «Объект или строка» если по условиям найдено несколько документов, устанавливает порядок сортировки для выбора документа для обновления.
    • [options.rawResult] «Булево значение» если true, возвращает исходный результат из драйвера MongoDB
    • [options.select] «Объект или строка» задаёт поля документа для возврата.
    • [options.maxTimeMS] «Число» устанавливает временной лимит на запрос — требует mongodb >= 2.6.0
    • [options.translateAliases=null] «Булево значение» Если установлено true, переводит любые определённые схемой псевдонимы в filter, projection, update, и distinct. Выбрасывает ошибку, если существуют конфликты, где и псевдоним, и исходное свойство определены в одном объекте.
Возвращаемое значение:
  • «Query»

Выполняет команду MongoDB findOneAndReplace().

Находит соответствующий документ, заменяет его предоставленным документом и возвращает изменённый документ.

Эта функция запускает следующий middleware.

  • findOneAndReplace()

Пример:

A.findOneAndReplace(filter, replacement, options)  // return Query
A.findOneAndReplace(filter, replacement) // returns Query
A.findOneAndReplace()                    // returns Query

Model.findOneAndUpdate()

Параметры:
  • [conditions] «Объект»
  • [update] «Объект»
  • [options] «Объект» необязательно, см. Query.prototype.setOptions()
    • [options.returnDocument='before'] «Строка» Имеет два возможных значения, 'before' и 'after'. По умолчанию возвращает документ до применения обновления.
    • [options.lean] «Объект» если имеет истинное значение, mongoose вернёт документ как обычный JavaScript-объект, а не как документ mongoose. См. Query.lean() и учебник по Mongoose lean.
    • [options.session=null] «ClientSession» Сессия, связанная с этим запросом. См. документацию по транзакциям.
    • [options.strict] «Булево значение или строка» перезаписывает опцию строгого режима схемы опцию строгого режима
    • [options.timestamps=null] «Булево значение» Если установлено false и включены временные метки на уровне схемы, пропустить временные метки для этого обновления. Обратите внимание, что это позволяет перезаписывать временные метки. Ничего не делает, если временные метки на уровне схемы не установлены.
    • [options.overwrite=false] «Булево значение» По умолчанию, если вы не включаете операторы обновления в update, Mongoose обернёт update в $set за вас. Это предотвращает случайное перезаписывание документа. Эта опция сообщает Mongoose пропустить добавление $set. Альтернативой этому было бы использование Model.findOneAndReplace(conditions, update, options, callback).
    • [options.upsert=false] «Булево значение» если true, и документы не найдены, вставить новый документ
    • [options.projection=null] «Объект, строка или массив строк» необязательные поля для возврата, см. Query.prototype.select()
    • [options.new=false] «Булево значение» если true, вернуть изменённый документ вместо исходного
    • [options.fields] «Объект или строка» Выбор полей. Эквивалентно .select(fields).findOneAndUpdate()
    • [options.maxTimeMS] «Число» устанавливает временной лимит на запрос — требует mongodb >= 2.6.0
    • [options.sort] «Объект или строка» если по условиям найдено несколько документов, устанавливает порядок сортировки для выбора документа для обновления.
    • [options.runValidators] «Булево значение» если true, запускает валидаторы обновления для этой команды. Валидаторы обновления проверяют операцию обновления по схеме модели
    • [options.setDefaultsOnInsert=true] «Булево значение» Если setDefaultsOnInsert и upsert true, mongoose применит значения по умолчанию, указанные в схеме модели, если создаётся новый документ
    • [options.rawResult] «Булево значение» если true, возвращает исходный результат из драйвера MongoDB
    • [options.translateAliases=null] «Булево значение» Если установлено true, переводит любые определённые схемой псевдонимы в filter, projection, update, и distinct. Выбрасывает ошибку, если существуют конфликты, где и псевдоним, и исходное свойство определены в одном объекте.
Возвращаемое значение:
  • «Запрос»
См.:
  • Учебник
  • mongodb

Выполняет команду mongodb findOneAndUpdate.

Находит соответствующий документ, обновляет его в соответствии с аргументом update, передавая любые options, и возвращает найденный документ (если есть) в обратный вызов. Запрос выполняется, если callback передан, в противном случае возвращается объект Query.

Пример:

A.findOneAndUpdate(conditions, update, options)  // returns Query
A.findOneAndUpdate(conditions, update)           // returns Query
A.findOneAndUpdate()                             // returns Query

Примечание:

Все ключи верхнего уровня обновления, которые не являются atomic именами операций, обрабатываются как операции set:

Пример:

const query = { name: 'borne' };
Model.findOneAndUpdate(query, { name: 'jason bourne' }, options)

// is sent as
Model.findOneAndUpdate(query, { $set: { name: 'jason bourne' }}, options)

Примечание:

Функции findOneAndX и findByIdAndX поддерживают ограниченную валидацию, которую можно включить, установив опцию runValidators.

Если вам нужна полная валидация, используйте традиционный подход, сначала извлекая документ.

const doc = await Model.findById(id);
doc.name = 'jason bourne';
await doc.save();

Model.hydrate()

Параметры:
  • obj «Объект»
  • [projection] «Объект|Строка|Массив[Строка]» необязательная проекция, содержащая поля, которые должны быть выбраны для этого документа
  • [options] «Объект» необязательные параметры
    • [options.setters=false] «Булево» если true, применять установщики схемы при гидратации
Возвращает:
  • «Документ» экземпляр документа

Сокращенная запись для создания нового документа из существующих исходных данных, предварительно сохраненных в базе данных. Документ, возвращенный, не имеет полей, помеченных как измененные изначально.

Пример:

// hydrate previous data into a Mongoose document
const mongooseCandy = Candy.hydrate({ _id: '54108337212ffb6d459f854c', type: 'jelly bean' });

Model.init()

Эта функция отвечает за построение индексов, если autoIndex не отключен.

Mongoose автоматически вызывает эту функцию при создании модели с помощью mongoose.model() или connection.model(), поэтому вам не нужно вызывать init() для запуска создания индексов.

Однако, возможно, вам потребуется вызвать init(), чтобы получить обещание, которое выполнится, когда ваши индексы будут завершены. Вызов await Model.init() полезен, если вам нужно дождаться создания индексов перед продолжением. Например, если вы хотите дождаться создания уникальных индексов перед продолжением тестового случая.

Пример:

const eventSchema = new Schema({ thing: { type: 'string', unique: true } })
// This calls `Event.init()` implicitly, so you don't need to call
// `Event.init()` on your own.
const Event = mongoose.model('Event', eventSchema);

await Event.init();
console.log('Indexes are done building!');

Model.insertMany()

Параметры:
  • doc(s) «Массив|Объект|[объект Объект]»
  • [options] «Объект» см. параметры драйвера mongodb
    • [options.ordered=true] «Булево» если true, немедленно завершит выполнение при обнаружении первой ошибки. Если false, вставит все возможные документы и сообщит об ошибках позже. insertMany() с ordered = false называется "неупорядоченным" insertMany().
    • [options.rawResult=false] «Булево» если false, возвращаемое обещание разрешается на документы, прошедшие валидацию mongoose. Если true, вернет исходный результат драйвера MongoDB с свойством mongoose, содержащим validationErrors и results , если это неупорядоченный insertMany.
    • [options.lean=false] «Булево» если true, пропускает гидратацию и валидацию документов. Эта опция полезна для повышения производительности, но Mongoose не будет проверять документы перед вставкой.
    • [options.limit=null] «Число» ограничивает количество обрабатываемых документов (валидация/преобразование) mongoose параллельно, это **НЕ** отправляет документы порциями в MongoDB. Используйте эту опцию, если вы обрабатываете большое количество документов и у вашего приложения заканчивается память.
    • [options.populate=null] «Строка|Объект|Массив» заполняет результирующие документы. Эта опция является бесполезной, если rawResult установлено.
    • [options.throwOnValidationError=false] «Булево» Если true и ordered: false, выбросить ошибку, если одна из операций не прошла валидацию, но все валидные операции завершились успешно.
Возвращает:
  • «Обещание» разрешающее исходный результат драйвера MongoDB, если options.rawResult было true, или документы, прошедшие валидацию, в противном случае

Сокращенная запись для проверки массива документов и вставки их в MongoDB, если все они валидны. Эта функция быстрее, чем .create() , потому что она отправляет только одну операцию на сервер, а не одну для каждого документа.

Mongoose всегда проверяет каждый документ **до** отправки insertMany в MongoDB. Поэтому, если у одного документа есть ошибка валидации, никакие документы не будут сохранены, если вы не установите опцию ordered в false.

Эта функция не запускает миддлвары сохранения.

Эта функция запускает следующие миддлвары.

  • insertMany()

Пример:

await Movies.insertMany([
  { name: 'Star Wars' },
  { name: 'The Empire Strikes Back' }
]);

Model.inspect()

Помощник для console.log. Для модели с именем 'MyModel' возвращает строку 'Model { MyModel }'.

Пример:

const MyModel = mongoose.model('Test', Schema({ name: String }));
MyModel.inspect(); // 'Model { Test }'
console.log(MyModel); // Prints 'Model { Test }'

Model.listIndexes()

Возвращает:
  • «Обещание»

Выводит список индексов, которые в настоящее время определены в MongoDB. Это может или не может совпадать с индексами, определенными в вашей схеме, в зависимости от того, используете ли вы autoIndex опцию и создаёте ли индексы вручную.

Model.populate()

Параметры:
  • docs «Документ|Массив» Либо один документ, либо массив документов для заполнения.
  • options «Объект|Строка» Либо пути для заполнения, либо объект, определяющий все параметры
    • [options.path=null] «строка» Путь для заполнения.
    • [options.populate=null] «строка|PopulateOptions» Рекурсивное заполнение путей в заполненных документах. См. документацию по глубокому заполнению.
    • [options.retainNullValues=false] «логическое значение» По умолчанию Mongoose удаляет значения null и undefined из заполненных массивов. Используйте этот параметр, чтобы populate() сохранили null и undefined элементы массива.
    • [options.getters=false] «логическое значение» Если true, Mongoose вызовет любые геттеры, определенные в localField. По умолчанию Mongoose получает исходное значение localField. Например, вам нужно будет установить этот параметр в true , если вы хотите добавить lowercase геттер к вашей localField.
    • [options.clone=false] «логическое значение» Когда вы делаете BlogPost.find().populate('author'), статьи блога с одним автором будут использовать 1 копию author документа. Включите этот параметр, чтобы Mongoose клонировал заполненные документы перед их назначением.
    • [options.match=null] «Объект|Функция» Добавляет дополнительный фильтр к запросу заполнения. Может быть объектом фильтра, содержащим синтаксис запросов MongoDB, или функцией, возвращающей объект фильтра.
    • [options.skipInvalidIds=false] «логическое значение» По умолчанию Mongoose выбрасывает ошибку преобразования, если localField и foreignField схемы не совпадают. Если вы включите этот параметр, Mongoose вместо этого отфильтрует любые localField свойства, которые не могут быть преобразованы в тип схемы foreignField.
    • [options.perDocumentLimit=null] «Число» По соображениям обратной совместимости, limit с populate() могут давать неверные результаты, поскольку он выполняет только один запрос для каждого заполняемого документа. Если вы установите perDocumentLimit, Mongoose гарантирует правильное limit на документ, выполняя отдельный запрос для каждого документа, чтобы populate(). Например, .find().populate({ path: 'test', perDocumentLimit: 2 }) выполнит 2 дополнительных запроса, если .find() вернет 2 документа.
    • [options.strictPopulate=true] «логическое значение» Установите в false, чтобы разрешить заполнение путей, которые не определены в схеме данной модели.
    • [options.options=null] «Объект» Дополнительные параметры, такие как limit и lean.
    • [options.transform=null] «Функция» Функция, которую Mongoose будет вызывать для каждого заполненного документа, позволяющая преобразовать заполненный документ.
  • [callback(err,doc)] «Функция» Необязательный обратный вызов, выполняемый по завершении. Принимает err и doc(s).
Возвращает:
  • «Обещание»

Заполняет ссылки на документы.

Изменено в Mongoose 6: модель, на которой вы вызываете populate(), должна быть моделью «локального поля», а не моделью «внешнего поля».

Доступные параметры верхнего уровня:

  • path: путь(и) через пробел для заполнения
  • select: необязательные поля для выбора
  • match: необязательные условия запроса для соответствия
  • model: необязательное имя модели для использования при заполнении
  • options: необязательные параметры запроса, такие как сортировка, ограничение и т. д.
  • justOne: необязательный булевый параметр, если true, Mongoose всегда установит path в документ или null , если документ не найден. Если false, Mongoose всегда установит path в массив, который будет пустым, если документы не найдены. По умолчанию определяется по схеме.
  • strictPopulate: необязательный булевый параметр, установите в false , чтобы разрешить заполнение путей, которые отсутствуют в схеме.

Пример:

const Dog = mongoose.model('Dog', new Schema({ name: String, breed: String }));
const Person = mongoose.model('Person', new Schema({
  name: String,
  pet: { type: mongoose.ObjectId, ref: 'Dog' }
}));

const pets = await Pet.create([
  { name: 'Daisy', breed: 'Beagle' },
  { name: 'Einstein', breed: 'Catalan Sheepdog' }
]);

// populate many plain objects
const users = [
  { name: 'John Wick', dog: pets[0]._id },
  { name: 'Doc Brown', dog: pets[1]._id }
];
await User.populate(users, { path: 'dog', select: 'name' });
users[0].dog.name; // 'Daisy'
users[0].dog.breed; // undefined because of `select`

Model.prototype.$model()

Параметры:
  • name «Строка» имя модели
Возвращает:
  • «Модель»

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

Пример:

const doc = new Tank;
await doc.model('User').findById(id);

Model.prototype.$where

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

Дополнительные свойства для присоединения к запросу при вызове save() и isNew равно false.

Model.prototype.base

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

Базовый экземпляр Mongoose, используемый моделью.

Model.prototype.baseModelName

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

Если это модель-дискриминатор, baseModelName — это имя базовой модели.

Model.prototype.collection

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

Экземпляр коллекции, используемый этой моделью. Коллекция Mongoose — это тонкий оболочек над [коллекцией драйвера MongoDB Node.js](коллекцией драйвера MongoDB Node.js). Использование Model.collection означает, что вы обходите промежуточное ПО, валидацию и преобразование Mongoose.

Это свойство является только для чтения. Изменение этого свойства — это пустая операция.

Model.prototype.collection

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

Коллекция, используемая моделью.

Model.prototype.db

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

Подключение, используемое моделью.

Model.prototype.deleteOne()

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

Удаляет этот документ из базы данных. Эквивалентно .remove().

Пример:

product = await product.deleteOne();
await Product.findById(product._id); // null

Model.prototype.discriminators

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

Зарегистрированные дискриминаторы для этой модели.

Model.prototype.increment()

См.:
  • versionKeys

Сигнализирует, что мы хотим увеличить версию этого документа.

Пример:

const doc = await Model.findById(id);
doc.increment();
await doc.save();

Model.prototype.model()

Параметры:
  • name «Строка» имя модели
Возвращает:
  • «Модель»

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

Пример:

const doc = new Tank;
await doc.model('User').findById(id);

Model.prototype.modelName

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

Имя модели

Model.prototype.save()

Параметры:
  • [options] «Объект» необязательные параметры
    • [options.session=null] «Сессия» сессия, связанная с этой операцией сохранения. Если не указано, по умолчанию используется связанная с документом сессия.
    • [options.safe] «Объект» (УСТЕРЕЖЕННО) переопределяет параметр безопасной схемы. Используйте параметр w вместо этого.
    • [options.validateBeforeSave] «Булево» установите в false для сохранения без валидации.
    • [options.validateModifiedOnly=false] «Булево» если true, Mongoose будет валидировать только измененные пути, а не измененные пути и required пути.
    • [options.w] «Число/Строка» задайте уровень обеспечения записи. Переопределяет параметр writeConcern на уровне схемы
    • [options.j] «Булево» установите в true, чтобы MongoDB ожидал, пока эта save() была записана в журнал перед разрешением возвращенного обещания. Переопределяет параметр writeConcern на уровне схемы
    • [options.wtimeout] «Число» устанавливает таймаут для обеспечения записи. Переопределяет параметр writeConcern на уровне схемы.
    • [options.checkKeys=true] «Булево» по умолчанию драйвер MongoDB предотвращает сохранение ключей, начинающихся с '$' или содержащих '.', Установите этот параметр в false , чтобы пропустить проверку. См. ограничения на имена полей
    • [options.timestamps=true] «Булево» если false и временные метки включены, пропустите временные метки для этой save().
Возвращает:
  • «Promise»
См.:
  • middleware

Сохраняет этот документ, вставляя новый документ в базу данных, если document.isNew равно true, или отправляет операцию updateOne только с измененными путями, если isNew равно false.

Пример:

product.sold = Date.now();
product = await product.save();

Если сохранение выполнено успешно, возвращаемое обещание выполнится с сохраненным документом.

Пример:

const newProduct = await product.save();
newProduct === product; // true

Model.replaceOne()

Параметры:
  • filter «Объект»
  • doc «Объект»
  • [options] «Объект» необязательно, см. Query.prototype.setOptions()
    • [options.strict] «Булево/Строка» переопределяет параметр strict mode схемы
    • [options.upsert=false] «Булево» если true, и документы не найдены, вставьте новый документ
    • [options.writeConcern=null] «Объект» задает уровень обеспечения записи для реплицированных наборов. Переопределяет уровень обеспечения записи схемы
    • [options.timestamps=null] «Булево» Если установлено false и временные метки на уровне схемы включены, пропустите временные метки для этого обновления. Не делает ничего, если временные метки на уровне схемы не установлены.
    • [options.translateAliases=null] «Булево» Если установлено true, преобразует любые определения псевдонимов схемы в filter, projection, update, и distinct. Выбрасывает ошибку, если есть конфликты, где псевдоним и исходное свойство определены в одном объекте.
Возвращает:
  • «Запрос»
См.:
  • Документы запроса
  • UpdateResult

Заменяет существующий документ заданным документом (без атомарных операторов, таких как $set).

Пример:

const res = await Person.replaceOne({ _id: 24601 }, { name: 'Jean Valjean' });
res.matchedCount; // Number of documents matched
res.modifiedCount; // Number of documents modified
res.acknowledged; // Boolean indicating everything went smoothly.
res.upsertedId; // null or an id containing a document that had to be upserted.
res.upsertedCount; // Number indicating how many documents had to be upserted. Will either be 0 or 1.

Эта функция запускает следующее промежуточное ПО.

  • replaceOne()

Model.schema

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

Схема, используемая моделью.

Model.startSession()

Параметры:
  • [options] «Объект» см. параметры драйвера mongodb
    • [options.causalConsistency=true] «Булево» установите в false, чтобы отключить согласованность событий
Возвращает:
  • «Promise<ClientSession>» обещание, которое разрешается в драйвер MongoDB ClientSession

Требуется MongoDB >= 3.6.0. Запускает сессию MongoDB для преимуществ, таких как причинно-следственная согласованность, повторные записи и транзакции.

Вызов MyModel.startSession() эквивалентен вызову MyModel.db.startSession().

Эта функция не срабатывает никаких миддлверов.

Пример:

const session = await Person.startSession();
let doc = await Person.findOne({ name: 'Ned Stark' }, null, { session });
await doc.remove();
// `doc` will always be null, even if reading from a replica set
// secondary. Without causal consistency, it is possible to
// get a doc back from the below query if the query reads from a
// secondary that is experiencing replication lag.
doc = await Person.findOne({ name: 'Ned Stark' }, null, { session, readPreference: 'secondary' });

Model.syncIndexes()

Параметры:
  • [options] «Объект» параметры для передачи в ensureIndexes()
    • [options.background=null] «Булево» если указано, переопределяет свойство background каждого индекса
Возвращает:
  • «Обещание»

Синхронизирует индексы в MongoDB с индексами, определёнными в схеме этой модели. Эта функция удалит все индексы, не определённые в схеме модели, за исключением индекса _id, и создаст все индексы, которые есть в вашей схеме, но отсутствуют в MongoDB.

Дополнительную информацию см. в статье блога.

Пример:

const schema = new Schema({ name: { type: String, unique: true } });
const Customer = mongoose.model('Customer', schema);
await Customer.collection.createIndex({ age: 1 }); // Index is not in schema
// Will drop the 'age' index and create an index on `name`
await Customer.syncIndexes();

Model.translateAliases()

Параметры:
  • fields «Объект» поля/условия, которые могут содержать псевдонимы ключей
  • [errorOnDuplicates] «Булево» если true, выбросить ошибку, если для ключа есть и ключ, и псевдоним в fields
Возвращает:
  • «Объект» переведённые «чистые» поля/условия

Перевод любых псевдонимов полей/условий, чтобы конечный запрос или объект документа были «чистыми»

Пример:

await Character.find(Character.translateAliases({
   '名': 'Eddard Stark' // Alias for 'name'
});

По умолчанию translateAliases() перезаписывает исходные поля алиасами. Итак, если n является алиасом для name, то { n: 'alias', name: 'raw' } будет разрешено как { name: 'alias' }. Однако вы можете установить опцию errorOnDuplicates для вывода ошибки, если есть потенциально конфликтующие пути. Опция translateAliases для запросов использует errorOnDuplicates.

Примечание:

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

Model.updateMany()

Параметры:
  • filter «Объект»
  • update «Объект или массив»
  • [options] «Объект» необязательно, см. Query.prototype.setOptions()
    • [options.strict] «Булево или строка» переопределяет опцию режима строгости схемы строгий режим
    • [options.upsert=false] «Булево» если true, и нет документов, вставить новый документ
    • [options.writeConcern=null] «Объект» устанавливает уровень соблюдения для реплицируемых наборов. Переопределяет уровень соблюдения на уровне схемы
    • [options.timestamps=null] «Булево» Если установлено значение false, и включены временные метки на уровне схемы, пропустить временные метки для этого обновления. Не делает ничего, если временные метки на уровне схемы не установлены.
    • [options.translateAliases=null] «Булево» Если установлено значение true, переводит любые псевдонимы, определённые в схеме, в filter, projection, update, и distinct. Вызывает ошибку, если есть конфликты, где и алиас, и исходное свойство определены в одном объекте.
Возвращает:
  • «Запрос»
См.:
  • Документы запросов
  • Документация MongoDB
  • UpdateResult

То же, что и updateOne(), за исключением того, что MongoDB обновит все документы, которые соответствуют filter (в отличие от только первого), независимо от значения опции multi.

Примечание updateMany не будет срабатывать миддлверов обновления. Используйте pre('updateMany') и post('updateMany') вместо этого.

Пример:

const res = await Person.updateMany({ name: /Stark$/ }, { isDeleted: true });
res.matchedCount; // Number of documents matched
res.modifiedCount; // Number of documents modified
res.acknowledged; // Boolean indicating everything went smoothly.
res.upsertedId; // null or an id containing a document that had to be upserted.
res.upsertedCount; // Number indicating how many documents had to be upserted. Will either be 0 or 1.

Эта функция запускает следующие миддлверы.

  • updateMany()

Model.updateOne()

Параметры:
  • filter «Объект»
  • update «Объект или массив»
  • [options] «Объект» необязательно, см. Query.prototype.setOptions()
    • [options.strict] «Булево или строка» переопределяет опцию режима строгости схемы строгий режим
    • [options.upsert=false] «Булево» если true, и нет документов, вставить новый документ
    • [options.writeConcern=null] «Объект» устанавливает уровень соблюдения для реплицируемых наборов. Переопределяет уровень соблюдения на уровне схемы
    • [options.timestamps=null] «Булево» Если установлено значение false, и включены временные метки на уровне схемы, пропустить временные метки для этого обновления. Примечание: это позволяет перезаписать временные метки. Не делает ничего, если временные метки на уровне схемы не установлены.
    • [options.translateAliases=null] «Булево» Если установлено значение true, переводит любые псевдонимы, определённые в схеме, в filter, projection, update, и distinct. Вызывает ошибку, если есть конфликты, где и алиас, и исходное свойство определены в одном объекте.
Возвращает:
  • «Запрос»
См.:
  • Документы запросов
  • Документация MongoDB
  • UpdateResult

Обновить только первый документ, который соответствует filter.

  • Используйте replaceOne() для перезаписи целого документа, вместо использования атомарных операторов, например $set.

Пример:

const res = await Person.updateOne({ name: 'Jean-Luc Picard' }, { ship: 'USS Enterprise' });
res.matchedCount; // Number of documents matched
res.modifiedCount; // Number of documents modified
res.acknowledged; // Boolean indicating everything went smoothly.
res.upsertedId; // null or an id containing a document that had to be upserted.
res.upsertedCount; // Number indicating how many documents had to be upserted. Will either be 0 or 1.

Эта функция запускает следующие миддлверы.

  • updateOne()

Model.validate()

Параметры:
  • obj «Объект»
  • pathsToValidate «Массив или строка»
  • [context] «Объект»
Возвращает:
  • «Обещание, неопределено, пусто»

Преобразует и проверяет заданный объект по схеме этой модели, передавая указанные context пользовательским валидаторам.

Пример:

const Model = mongoose.model('Test', Schema({
  name: { type: String, required: true },
  age: { type: Number, required: true }
});

try {
  await Model.validate({ name: null }, ['name'])
} catch (err) {
  err instanceof mongoose.Error.ValidationError; // true
  Object.keys(err.errors); // ['name']
}

Model.watch()

Параметры:
  • [pipeline] «Массив»
  • [options] «Объект» см. опции драйвера MongoDB
    • [options.hydrate=false] «Булево» если true и fullDocument: 'updateLookup' установлено, Mongoose автоматически закрепит fullDocument в полноценный документ Mongoose
Возвращает:
  • «Поток изменений» оболочка потока изменений, специфичная для Mongoose, наследуется от EventEmitter

Требуется реплицируемый набор, работающий на MongoDB >= 3.6.0. Отслеживает изменения в базовой коллекции с помощью потоков изменений MongoDB.

Эта функция не запускает миддлверы. В частности, она не запускает миддлверы агрегации.

Объект ChangeStream является обработчиком событий, который генерирует следующие события:

  • 'change': Произошло изменение, см. пример ниже
  • 'error': Произошла непреодолимая ошибка. В частности, потоки изменений в настоящее время завершаются ошибкой, если они теряют соединение с первичным реплицируемым набором. Следите за этой проблемой GitHub для обновлений.
  • 'end': Издаётся, если базовый поток закрыт
  • 'close': Издаётся, если базовый поток закрыт

Пример:

const doc = await Person.create({ name: 'Ned Stark' });
const changeStream = Person.watch().on('change', change => console.log(change));
// Will print from the above `console.log()`:
// { _id: { _data: ... },
//   operationType: 'delete',
//   ns: { db: 'mydb', coll: 'Person' },
//   documentKey: { _id: 5a51b125c5500f5aa094c7bd } }
await doc.remove();

Model.where()

Параметры:
  • path «Строка»
  • [val] «Объект» необязательное значение
Возвращает:
  • «Запрос»

Создаёт запрос, применяет переданные условия и возвращает запрос.

Например, вместо:

User.find({ age: { $gte: 21, $lte: 65 } });

можно написать:

User.where('age').gte(21).lte(65).exec();

Так как класс Query также поддерживает where, можно продолжить цепочку

User
.where('age').gte(21).lte(65)
.where('name', /^b/i)
... etc

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

Spec-Zone.ru

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