Модель
Модель()
Параметры:
-
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.
Иногда вам нужно выполнять запросы в MongoDB с использованием JavaScript-выражений. Вы можете сделать это с помощью find({ $where: javascript }), или вы можете использовать сокращённый метод Mongoose $where через цепочку запросов или в модели Mongoose.
Blog.$where('this.username.indexOf("val") !== -1').exec(function (err, docs) {});
Модель.aggregate()
Параметры:
-
[pipeline]«Массив» конвейер агрегации в виде массива объектов -
[options]«Объект» параметры агрегации
Возвращает:
- «Агрегация»
См.:
Выполняет агрегацию по коллекции моделей.
Если передан 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 (поскольку может быть возвращена любая форма документа).
Подробнее об агрегациях:
Модель.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);
});
Поддерживаемые операции:
insertOneupdateOneupdateManydeleteOnedeleteManyreplaceOne
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»
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()
Возвращает:
- «Запрос»
См.:
Находит один документ по полю _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. Выбрасывает ошибку, если есть конфликты, где и псевдоним, и исходное свойство определены в одном и том же объекте.
Возвращает:
- «Запрос»
См.:
Выполняет команду 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. Выбрасывает ошибку, если есть конфликты, где и псевдоним, и исходное свойство определены в одном и том же объекте.
Возвращает:
- «Запрос»
См.:
Выполняет команду 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. Выбрасывает ошибку, если есть конфликты, где псевдоним и исходное свойство определены в одном объекте.
Возвращает:
- «Запрос»
См.:
Выполняет команду 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. Выбрасывает ошибку, если есть конфликты, где псевдоним и исходное свойство определены в одном объекте.
Возвращает:
- «Запрос»
См.:
Ищет один документ.
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 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иupserttrue, mongoose применит значения по умолчанию, указанные в схеме модели, если создаётся новый документ -
[options.rawResult]«Булево значение» если true, возвращает исходный результат из драйвера MongoDB -
[options.translateAliases=null]«Булево значение» Если установленоtrue, переводит любые определённые схемой псевдонимы вfilter,projection,update, иdistinct. Выбрасывает ошибку, если существуют конфликты, где и псевдоним, и исходное свойство определены в одном объекте.
Возвращаемое значение:
- «Запрос»
См.:
Выполняет команду 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()
См.:
Сигнализирует, что мы хотим увеличить версию этого документа.
Пример:
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»
См.:
Сохраняет этот документ, вставляя новый документ в базу данных, если 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. Выбрасывает ошибку, если есть конфликты, где псевдоним и исходное свойство определены в одном объекте.
Возвращает:
- «Запрос»
См.:
Заменяет существующий документ заданным документом (без атомарных операторов, таких как $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. Вызывает ошибку, если есть конфликты, где и алиас, и исходное свойство определены в одном объекте.
Возвращает:
- «Запрос»
См.:
То же, что и 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. Вызывает ошибку, если есть конфликты, где и алиас, и исходное свойство определены в одном объекте.
Возвращает:
- «Запрос»
См.:
Обновить только первый документ, который соответствует 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