Документ
Document.prototype.$assertPopulated()
Параметры:
-
path«String|Array[String]» путь или массив путей для проверки.$assertPopulatedвыбрасывает ошибку, если какой-либо из указанных путей не заполнен. -
[values]«Object» необязательные значения для$set(). Удобно, если вы хотите вручную заполнить путь и убедиться, что путь был заполнен в одном вызове.
Возвращает:
- «Document» this
Выбрасывает ошибку, если заданный путь не заполнен
Пример:
const doc = await Model.findOne().populate('author');
doc.$assertPopulated('author'); // does not throw
doc.$assertPopulated('other path'); // throws an error
// Manually populate and assert in one call. The following does
// `doc.$set({ likes })` before asserting.
doc.$assertPopulated('likes', { likes });
Document.prototype.$clone()
Возвращает:
- «Document» копия этого документа
Возвращает копию этого документа с глубокой копией _doc и $__.
Document.prototype.$errors
Тип:
- «свойство»
Хэш, содержащий текущие ошибки валидации $errors.
Document.prototype.$getAllSubdocs()
Возвращает:
- «Array»
Получить все дочерние документы (по алгоритму обхода в ширину)
Document.prototype.$getPopulatedDocs()
Возвращает:
- «Array[Document]» массив заполненных документов. Пустой массив, если нет заполненных документов, связанных с этим документом.
Получает все заполненные документы, связанные с этим документом.
Document.prototype.$ignore()
Параметры:
-
path«String» путь для игнорирования
Не запускать валидацию для этого пути или сохранять изменения в этом пути.
Пример:
doc.foo = null;
doc.$ignore('foo');
doc.save(); // changes to foo will not be persisted and validators won't be run
Document.prototype.$inc()
Параметры:
-
path«String|Array» путь или пути для обновления -
val«Number» приращениеpathна это значение
Возвращает:
- «Document» this
Увеличивает числовое значение в path на заданное значение. При вызове save() для этого документа, Mongoose отправит $inc, а не $set.
Пример:
const schema = new Schema({ counter: Number });
const Test = db.model('Test', schema);
const doc = await Test.create({ counter: 0 });
doc.$inc('counter', 2);
await doc.save(); // Sends a `{ $inc: { counter: 2 } }` to MongoDB
doc.counter; // 2
doc.counter += 2;
await doc.save(); // Sends a `{ $set: { counter: 2 } }` to MongoDB
Document.prototype.$init()
Псевдоним для .init
Document.prototype.$isDefault()
Параметры:
-
[path]«String»
Возвращает:
- «Boolean»
Проверяет, установлен ли путь по умолчанию.
Пример:
MyModel = mongoose.model('test', { name: { type: String, default: 'Val '} });
const m = new MyModel();
m.$isDefault('name'); // true
Document.prototype.$isDeleted()
Параметры:
-
[val]«Boolean» необязательно, переопределяет, считает ли mongoose документ удалённым
Возвращает:
- «Boolean,Document» считает ли mongoose этот документ удалённым.
Геттер/сеттер, определяет, был ли документ удален.
Пример:
const product = await product.remove();
product.$isDeleted(); // true
product.remove(); // no-op, doesn't send anything to the db
product.$isDeleted(false);
product.$isDeleted(); // false
product.remove(); // will execute a remove against the db
Document.prototype.$isEmpty()
Параметры:
-
[path]«String»
Возвращает:
- «Boolean»
Возвращает true, если заданный путь имеет значение null или содержит только пустые объекты. Полезно для определения, будет ли этот дочерний документ удален параметром minimize option.
Пример:
const schema = new Schema({ nested: { foo: String } });
const Model = mongoose.model('Test', schema);
const doc = new Model({});
doc.$isEmpty('nested'); // true
doc.nested.$isEmpty(); // true
doc.nested.foo = 'bar';
doc.$isEmpty('nested'); // false
doc.nested.$isEmpty(); // false
Document.prototype.$isModified()
Псевдоним .isModified
Document.prototype.$isNew
Тип:
- «свойство»
Флаг булевого типа, указывающий, является ли документ новым. Если вы создаёте документ с помощью new, этот документ будет считаться "новым". $isNew — это способ, которым Mongoose определяет, нужно ли использовать insertOne() для создания нового документа или updateOne() для обновления существующего.
Пример:
const user = new User({ name: 'John Smith' });
user.$isNew; // true
await user.save(); // Sends an `insertOne` to MongoDB
С другой стороны, если вы загружаете существующий документ из базы данных с помощью findOne() или другой операции запроса, $isNew будет false.
Пример:
const user = await User.findOne({ name: 'John Smith' });
user.$isNew; // false
Mongoose устанавливает $isNew в false сразу после успешного выполнения save(). Это означает, что Mongoose устанавливает $isNew в false **до** выполнения хуков post('save'). В хуках post('save'), $isNew будет false, если save() завершился успешно.
Пример:
userSchema.post('save', function() {
this.$isNew; // false
});
await User.create({ name: 'John Smith' });
Для дочерних документов $isNew имеет значение true, если у родительского документа установлено значение $isNew или если вы создали новый дочерний документ.
Пример:
// Assume `Group` has a document array `users`
const group = await Group.findOne();
group.users[0].$isNew; // false
group.users.push({ name: 'John Smith' });
group.users[1].$isNew; // true
Document.prototype.$locals
Тип:
- «свойство»
Пустой объект, который вы можете использовать для хранения свойств в документе. Это полезно для передачи данных в middleware без конфликтов с внутренними компонентами Mongoose.
Пример:
schema.pre('save', function() {
// Mongoose will set `isNew` to `false` if `save()` succeeds
this.$locals.wasNew = this.isNew;
});
schema.post('save', function() {
// Prints true if `isNew` was set before `save()`
console.log(this.$locals.wasNew);
});
Document.prototype.$markValid()
Параметры:
-
path«String» поле для маркировки как валидного
Помечает путь как валидный, удаляя существующие ошибки валидации.
Document.prototype.$op
Тип:
- «свойство»
Строка, содержащая текущую операцию, которую Mongoose выполняет над этим документом. Может быть null, 'save', 'validate', или 'remove'.
Пример:
const doc = new Model({ name: 'test' });
doc.$op; // null
const promise = doc.save();
doc.$op; // 'save'
await promise;
doc.$op; // null
Document.prototype.$parent()
Возвращает:
- «Document»
Псевдоним для parent(). Если этот документ является дочерним или заполненным документом, возвращает родительский документ. В противном случае возвращает undefined.
Document.prototype.$populated()
Псевдоним .populated.
Document.prototype.$session()
Параметры:
-
[session]«ClientSession» переопределить текущую сессию
Возвращает:
- «ClientSession»
Геттер/сеттер для сессии, связанной с этим документом. Используется для автоматического установки session, если вы save() документ, полученный из запроса с связанной сессией.
Пример:
const session = MyModel.startSession();
const doc = await MyModel.findOne().session(session);
doc.$session() === session; // true
doc.$session(null);
doc.$session() === null; // true
Если это документ верхнего уровня, установка сессии распространяется на все дочерние документы.
Document.prototype.$set()
Параметры:
-
path«String|Object» путь или объект с парами ключ/значение для установки -
val«Any» значение для установки -
[type]«Schema|String|Number|Buffer|[object Object]» необязательно, укажите тип для "динамических" атрибутов -
[options]«Object» необязательно, укажите опции, которые изменяют поведение установки -
[options.merge=false]«Boolean» если true, установка вложенного пути объединит существующие значения, а не перезапишет весь объект. Таким образом,doc.set('nested', { a: 1, b: 2 })становитсяdoc.set('nested.a', 1); doc.set('nested.b', 2);
Возвращает:
- «Document» this
Псевдоним для set(), используется во избежание конфликтов
Document.prototype.$timestamps()
Параметры:
-
[value]«Boolean» переопределить текущую сессию
Возвращает:
- «Document,boolean,undefined,void» При использовании в качестве геттера (без аргумента), возвращается boolean, указывающий состояние опции timestamps, или "undefined", если опция сброшена. В противном случае возвращается "this".
Геттер/сеттер, определяющий, будет ли применяться опция timestamps по умолчанию для этого документа при использовании save() и bulkSave().
Пример:
const TestModel = mongoose.model('Test', new Schema({ name: String }, { timestamps: true }));
const doc = new TestModel({ name: 'John Smith' });
doc.$timestamps(); // true
doc.$timestamps(false);
await doc.save(); // Does **not** apply timestamps
Document.prototype.$validate()
Псевдоним .validate
Document.prototype.$where
Тип:
- «свойство»
Установите это свойство, чтобы добавить дополнительные фильтры запросов при сохранении этого документа, когда isNew равно false.
Пример:
// Make sure `save()` never updates a soft deleted document.
schema.pre('save', function() {
this.$where = { isDeleted: false };
});
Document.prototype.depopulate()
Параметры:
-
[path]«String|Array[String]» Конкретный путь для удаления. Если не задано, все пути в документе будут очищены. Или несколько путей, разделённых пробелами.
Возвращает:
- «Document» this
См.:
Принимает заполненное поле и возвращает его в незаполненное состояние.
Пример:
Model.findOne().populate('author').exec(function (err, doc) {
console.log(doc.author.name); // Dr.Seuss
console.log(doc.depopulate('author'));
console.log(doc.author); // '5144cf8050f071d979c118a7'
})
Если путь не был указан, все заполненные поля возвращаются в незаполненное состояние.
Document.prototype.directModifiedPaths()
Возвращает:
- «Array[String]»
Возвращает список путей, которые были непосредственно изменены. Прямой изменённый путь — это путь, который вы явно установили, будь то через doc.foo = 'bar', Object.assign(doc, { foo: 'bar' }), или doc.set('foo', 'bar').
Путь a может быть в modifiedPaths(), но не в directModifiedPaths(), потому что дочерний элемент a был изменён напрямую.
Пример:
const schema = new Schema({ foo: String, nested: { bar: String } });
const Model = mongoose.model('Test', schema);
await Model.create({ foo: 'original', nested: { bar: 'original' } });
const doc = await Model.findOne();
doc.nested.bar = 'modified';
doc.directModifiedPaths(); // ['nested.bar']
doc.modifiedPaths(); // ['nested', 'nested.bar']
Document.prototype.equals()
Параметры:
-
[doc]«Document» документ для сравнения. Если ложный, всегда вернёт "false".
Возвращает:
- «Boolean»
Возвращает true, если этот документ равен другому документу.
Документы считаются равными, если у них совпадают _idы, если у обоих документов нет _id, в этом случае эта функция использует deepEqual().
Document.prototype.errors
Тип:
- «property»
Хэш, содержащий текущие ошибки валидации.
Document.prototype.get()
Параметры:
-
path«String» -
[type]«Schema|String|Number|Buffer|[object Object]» необязательно укажите тип для атрибутов на лету -
[options]«Object» -
[options.virtuals=false]«Boolean» Применить виртуальные поля перед получением этого пути -
[options.getters=true]«Boolean» Если false, пропустить применение геттеров и получить только исходное значение
Возвращает:
- «Any»
Возвращает значение пути.
Пример:
// path
doc.get('age') // 47
// dynamic casting to a string
doc.get('age', String) // "47"
Document.prototype.getChanges()
Возвращает:
- «Object»
Возвращает изменения, произошедшие в документе в формате, который будет отправлен в MongoDB.
Пример:
const userSchema = new Schema({
name: String,
age: Number,
country: String
});
const User = mongoose.model('User', userSchema);
const user = await User.create({
name: 'Hafez',
age: 25,
country: 'Egypt'
});
// returns an empty object, no changes happened yet
user.getChanges(); // { }
user.country = undefined;
user.age = 26;
user.getChanges(); // { $set: { age: 26 }, { $unset: { country: 1 } } }
await user.save();
user.getChanges(); // { }
Изменение объекта, который getChanges() возвращает, не влияет на состояние отслеживания изменений документа. Даже если вы delete user.getChanges().$set, Mongoose всё равно отправит $set на сервер.
Document.prototype.id
Тип:
- «property»
См.:
Строковое представление _id этого документа.
Примечание:
Этот геттер по умолчанию присутствует во всех документах. Геттер можно отключить, установив id параметр своего Schema в ложь во время создания.
new Schema({ name: String }, { id: false });
Document.prototype.init()
Параметры:
-
doc«Object» документ, возвращённый mongo -
[opts]«Object» -
[fn]«Function»
Инициализирует документ без установщиков или помечания чего-либо изменённым.
Вызывается внутренне после того, как документ возвращён из mongodb. Обычно вам не нужно вызывать эту функцию самостоятельно.
Эта функция запускает init средства промежуточного ПО. Обратите внимание, что init хуки являются синхронными.
Document.prototype.inspect()
Возвращает:
- «String»
Помощник для console.log
Document.prototype.invalidate()
Параметры:
-
path«String» поле для отмены валидации. Для элементов массива используйте синтаксисarray.i.field, гдеi— индекс с нуля в массиве. -
err«String|Error» ошибка, которая объясняет причину, по которойpathбыл невалиден -
val«Object|String|Number|any» необязательное невалидное значение -
[kind]«String» необязательное свойствоkindдля ошибки
Возвращает:
- «ValidationError» текущая ValidationError со всеми текущими невалидными путями
Помечает путь как невалидный, вызывая сбой валидации.
Аргумент errorMsg станет сообщением ValidationError.
Аргумент value (если передан) будет доступен через свойство ValidationError.value.
doc.invalidate('size', 'must be less than 20', 14);
doc.validate(function (err) {
console.log(err)
// prints
{ message: 'Validation failed',
name: 'ValidationError',
errors:
{ size:
{ message: 'must be less than 20',
name: 'ValidatorError',
path: 'size',
type: 'user defined',
value: 14 } } }
})
Document.prototype.isDirectModified()
Параметры:
-
[path]«String|Array[String]»
Возвращает:
- «Boolean»
Возвращает true, если path был напрямую установлен и изменён, иначе false.
Пример:
doc.set('documents.0.title', 'changed');
doc.isDirectModified('documents.0.title') // true
doc.isDirectModified('documents') // false
Document.prototype.isDirectSelected()
Параметры:
-
path«String»
Возвращает:
- «Boolean»
Проверяет, был ли path явно выбран. Если проекции нет, всегда возвращает true.
Пример:
Thing.findOne().select('nested.name').exec(function (err, doc) {
doc.isDirectSelected('nested.name') // true
doc.isDirectSelected('nested.otherName') // false
doc.isDirectSelected('nested') // false
})
Document.prototype.isInit()
Параметры:
-
[path]«String»
Возвращает:
- «Boolean»
Проверяет, находится ли path в состоянии init, то есть он был установлен Document#init() и не изменялся с тех пор.
Document.prototype.isModified()
Параметры:
-
[path]«String» необязательно
Возвращает:
- «Boolean»
Возвращает true, если любой из заданных путей изменён, иначе false. Если аргументов нет, возвращает true , если какой-либо путь в этом документе изменён.
Если path задан, проверяет, был ли путь или любой полный путь, содержащий path в качестве части цепочки путей, изменён.
Пример:
doc.set('documents.0.title', 'changed');
doc.isModified() // true
doc.isModified('documents') // true
doc.isModified('documents.0.title') // true
doc.isModified('documents otherProp') // true
doc.isDirectModified('documents') // false
Document.prototype.isNew
Тип:
- «property»
См.:
Устаревший псевдоним для $isNew.
Document.prototype.isSelected()
Параметры:
-
path«String|Array[String]»
Возвращает:
- «Boolean»
Проверяет, был ли path выбран в исходном запросе, который инициализировал этот документ.
Пример:
const doc = await Thing.findOne().select('name');
doc.isSelected('name') // true
doc.isSelected('age') // false
Document.prototype.markModified()
Параметры:
-
path«String» путь для помечания как изменённого -
[scope]«Document» область для запуска валидаторов
Помечает путь как содержащий изменения, которые нужно записать в базу данных.
Очень полезно при использовании типов Mixed.
Пример:
doc.mixed.type = 'changed';
doc.markModified('mixed.type');
doc.save() // changes to mixed.type are now persisted
Document.prototype.modifiedPaths()
Параметры:
-
[options]«Object» -
[options.includeChildren=false]«Boolean» если true, возвращает дочерние элементы изменённых путей. Например, если false, список изменённых путей дляdoc.colors = { primary: 'blue' };не будет содержатьcolors.primary. Если true,modifiedPaths()вернёт массив, содержащийcolors.primary.
Возвращает:
- «Array[String]»
Возвращает список путей, которые были изменены.
Document.prototype.overwrite()
Параметры:
-
obj«Object» объект для перезаписи этого документа
Возвращает:
- «Document» this
Перезапишите все значения в этом документе значениями obj, за исключением неизменяемых свойств. Ведёт себя аналогично set(), за исключением того, что сбрасывает все свойства, которые не присутствуют в obj.
Document.prototype.parent()
Возвращает:
- «Документ»
Если этот документ является поддокументом или заполненным документом, возвращает родительский документ. Возвращает исходный документ, если родительского документа нет.
Document.prototype.populate()
Параметры:
-
path«Строка|Объект|Массив» либо путь для заполнения, либо объект, определяющий все параметры, либо массив таких объектов -
[select]«Объект|Строка» Выбор поля для запроса заполнения -
[model]«Модель» Модель, которую вы хотите использовать для заполнения. Если не указана, populate найдёт модель по имени в полеrefсхемы. -
[match]«Объект» Условия для запроса заполнения -
[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.transform=null]«Функция» Функция, которую Mongoose будет вызывать для каждого заполненного документа, позволяющая преобразовать заполненный документ. -
[options.options=null]«Объект» Дополнительные опции, такие какlimitиlean. -
[callback]«Функция» Обработчик
Возвращает:
-
«Promise,null» Возвращает Promise, если не задан
callback.
См.:
Заполняет пути существующего документа.
Пример:
// Given a document, `populate()` lets you pull in referenced docs
await doc.populate([
'stories',
{ path: 'fans', sort: { name: -1 } }
]);
doc.populated('stories'); // Array of ObjectIds
doc.stories[0].title; // 'Casino Royale'
doc.populated('fans'); // Array of ObjectIds
// If the referenced doc has been deleted, `populate()` will
// remove that entry from the array.
await Story.delete({ title: 'Casino Royale' });
await doc.populate('stories'); // Empty array
// You can also pass additional query options to `populate()`,
// like projections:
await doc.populate('fans', '-email');
doc.fans[0].email // undefined because of 2nd param `select`
Document.prototype.populated()
Параметры:
-
path«Строка» -
[val]«Любое» -
[options]«Объект»
Возвращает:
- «Массив,ObjectId,Число,Буфер,Строка,undefined,пусто»
Получает _id(ы), используемые во время заполнения указанного path.
Пример:
const doc = await Model.findOne().populate('author');
console.log(doc.author.name); // Dr.Seuss
console.log(doc.populated('author')); // '5144cf8050f071d979c118a7'
Если путь не был заполнен, возвращает undefined.
Document.prototype.replaceOne()
Параметры:
-
doc«Объект» -
[options]«Объект» -
[callback]«Функция»
Возвращает:
- «Запрос»
См.:
Отправляет команду replaceOne с этим документом _id в качестве селектора запроса.
Допустимые опции:
- также как и в Model.replaceOne
Document.prototype.save()
Параметры:
-
[options]«Объект» необязательные опции -
[options.session=null]«Сессия» сессия, связанная с этой операцией сохранения. Если не указана, по умолчанию используется связанная с документом сессия. -
[options.safe]«Объект» (УСТЕРЕЖЕН) переопределяет опцию safe схемы. Используйте опциюwвместо неё. -
[options.validateBeforeSave]«Логическое значение» Установите в false, чтобы сохранить без валидации. -
[options.validateModifiedOnly=false]«Логическое значение» Еслиtrue, Mongoose будет валидировать только изменённые пути, а не изменённые пути иrequiredпути. -
[options.w]«Число|Строка» установить write concern. Переопределяет опцию схемыwriteConcern -
[options.j]«Логическое значение» Установите в true, чтобы MongoDB ждал, пока этотsave()будет записан в журнал перед разрешением возвращаемого промиса. Переопределяет опцию схемыwriteConcern -
[options.wtimeout]«Число» устанавливает таймаут для write concern. Переопределяет опцию схемыwriteConcern. -
[options.checkKeys=true]«Логическое значение» драйвер MongoDB по умолчанию предотвращает сохранение ключей, начинающихся с '$' или содержащих '.', Установите эту опцию вfalseчтобы пропустить эту проверку. См. ограничения на имена полей -
[options.timestamps=true]«Логическое значение» еслиfalseи timestamps включены, пропустить timestamps для этогоsave(). -
[fn]«Функция» необязательный обработчик
Возвращает:
- «Promise,undefined,пусто» Возвращает undefined, если используется с обработчиком, или Promise в противном случае.
См.:
Сохраняет этот документ, вставляя новый документ в базу данных, если document.isNew равно true, или отправляет операцию updateOne только с изменениями в базе данных, не заменяя весь документ в последнем случае.
Пример:
product.sold = Date.now();
product = await product.save();
Если сохранение прошло успешно, возвращаемый промис будет выполнен с сохранённым документом.
Пример:
const newProduct = await product.save();
newProduct === product; // true
Document.prototype.schema
Тип:
- «свойство»
Схема документа.
Document.prototype.set()
Параметры:
-
path«Строка|Объект» путь или объект с парами ключ/значение для установки -
val«Любое» значение для установки -
[type]«Схема|Строка|Число|Буфер|[объект Объект]» необязательно укажите тип для атрибутов «на лету» -
[options]«Объект» необязательно укажите опции, которые изменяют поведение установки
Возвращает:
- «Документ» this
Устанавливает значение пути или нескольких путей. Псевдоним для .$set.
Пример:
// path, value
doc.set(path, value)
// object
doc.set({
path : value
, path2 : {
path : value
}
})
// on-the-fly cast to number
doc.set(path, value, Number)
// on-the-fly cast to string
doc.set(path, value, String)
// changing strict mode behavior
doc.set(path, value, { strict: false });
Document.prototype.toJSON()
Параметры:
-
options«Объект» -
[options.flattenMaps=true]«Булево» если true, преобразовать карты в POJO. Полезно, если вы хотитеJSON.stringify()результат. -
[options.flattenObjectIds=false]«Булево» если true, преобразовать все ObjectIds в результате в 24-символьные шестнадцатеричные строки.
Возвращает:
- «Объект»
См.:
Значение, возвращаемое этим методом, используется в вызовах JSON.stringify(doc).
Этот метод принимает те же параметры, что и Document#toObject. Чтобы применить эти параметры по умолчанию ко всем документам вашей схемы, установите параметр схемы toJSON в то же значение.
schema.set('toJSON', { virtuals: true });
Существует одно различие между toJSON() и toObject() параметрами. При вызове toJSON(), параметр flattenMaps по умолчанию равен true, потому что JSON.stringify() по умолчанию не преобразует карты в объекты. При вызове toObject(), параметр flattenMaps по умолчанию равен false.
См. параметры схемы для получения дополнительной информации о настройке параметров toJSON по умолчанию.
Document.prototype.toObject()
Параметры:
-
[options]«Объект» -
[options.getters=false]«Булево» если true, применить все геттеры, включая виртуальные -
[options.virtuals=false]«Булево» если true, применить виртуальные геттеры, включая псевдонимы. Используйте{ getters: true, virtuals: false }для применения только геттеров, а не виртуальных -
[options.aliases=true]«Булево» еслиoptions.virtuals = true, вы можете установитьoptions.aliases = falseдля пропуска применения псевдонимов. Этот параметр бесполезен, еслиoptions.virtuals = false. -
[options.minimize=true]«Булево» если true, пропускать любые пустые объекты из вывода -
[options.transform=null]«Функция|null» если задано, mongoose вызовет эту функцию, чтобы преобразовать возвращённый объект -
[options.depopulate=false]«Булево» если true, заменить пути, заполненные по умолчанию, исходным ID в выводе. Не влияет на виртуальные заполненные пути. -
[options.versionKey=true]«Булево» если false, исключить ключ версии (__vпо умолчанию) из вывода -
[options.flattenMaps=false]«Булево» если true, преобразовать Maps в POJOs. Полезно, если вы хотитеJSON.stringify()результатtoObject(). -
[options.flattenObjectIds=false]«Булево» если true, преобразовать все ObjectIds в результате в 24-символьные шестнадцатеричные строки. -
[options.useProjection=false]«Булево»- Если true, пропускает поля, исключенные в проекции этого документа. Если вы не указали проекцию, это пропустит любые поля, имеющие
select: falseв схеме.
- Если true, пропускает поля, исключенные в проекции этого документа. Если вы не указали проекцию, это пропустит любые поля, имеющие
Возвращает:
- «Объект» js объект (не POJO)
См.:
Преобразует этот документ в обычный JavaScript-объект (POJO).
Буферы преобразуются в экземпляры mongodb.Binary для правильного хранения.
Геттеры/Виртуальные свойства
Пример применения только геттеров путей
doc.toObject({ getters: true, virtuals: false })
Пример применения только виртуальных геттеров
doc.toObject({ virtuals: true })
Пример применения геттеров путей и виртуальных свойств
doc.toObject({ getters: true })
Чтобы применить эти параметры по умолчанию ко всем документам вашей схемы, установите параметр схемы toObject в то же значение.
schema.set('toObject', { virtuals: true })
Преобразование:
Возможно, нам потребуется выполнить преобразование результирующего объекта на основе некоторых критериев, например, удалить какую-либо конфиденциальную информацию или вернуть пользовательский объект. В этом случае мы задаём необязательную функцию transform.
Функции преобразования принимают три аргумента
function (doc, ret, options) {}
-
docДокумент mongoose, который преобразуется -
retПредставление простого объекта, который был преобразован -
optionsПараметры, используемые (либо параметры схемы, либо параметры, переданные непосредственно)
Пример:
// specify the transform schema option
if (!schema.options.toObject) schema.options.toObject = {};
schema.options.toObject.transform = function (doc, ret, options) {
// remove the _id of every document before returning the result
delete ret._id;
return ret;
}
// without the transformation in the schema
doc.toObject(); // { _id: 'anId', name: 'Wreck-it Ralph' }
// with the transformation
doc.toObject(); // { name: 'Wreck-it Ralph' }
С помощью преобразований мы можем сделать гораздо больше, чем удалить свойства. Мы можем даже вернуть полностью новые настроенные объекты:
if (!schema.options.toObject) schema.options.toObject = {};
schema.options.toObject.transform = function (doc, ret, options) {
return { movie: ret.name }
}
// without the transformation in the schema
doc.toObject(); // { _id: 'anId', name: 'Wreck-it Ralph' }
// with the transformation
doc.toObject(); // { movie: 'Wreck-it Ralph' }
Примечание: если функция преобразования возвращает undefined, возвращаемое значение будет проигнорировано.
Преобразования также могут быть применены непосредственно, переопределяя любое преобразование, заданное в параметрах:
function xform (doc, ret, options) {
return { inline: ret.name, custom: true }
}
// pass the transform as an inline option
doc.toObject({ transform: xform }); // { inline: 'Wreck-it Ralph', custom: true }
Если вы хотите пропустить преобразования, используйте transform: false:
schema.options.toObject.hide = '_id';
schema.options.toObject.transform = function (doc, ret, options) {
if (options.hide) {
options.hide.split(' ').forEach(function (prop) {
delete ret[prop];
});
}
return ret;
}
const doc = new Doc({ _id: 'anId', secret: 47, name: 'Wreck-it Ralph' });
doc.toObject(); // { secret: 47, name: 'Wreck-it Ralph' }
doc.toObject({ hide: 'secret _id', transform: false });// { _id: 'anId', secret: 47, name: 'Wreck-it Ralph' }
doc.toObject({ hide: 'secret _id', transform: true }); // { name: 'Wreck-it Ralph' }
Если вы передаёте преобразование в параметрах toObject(), Mongoose применит преобразование к вложенным документам в дополнение к документу верхнего уровня. Аналогично, transform: false пропускает преобразования для всех вложенных документов. Обратите внимание, что это поведение отличается для преобразований, определённых в схеме: если вы определите преобразование в schema.options.toObject.transform, это преобразование не будет применено к вложенным документам.
const memberSchema = new Schema({ name: String, email: String });
const groupSchema = new Schema({ members: [memberSchema], name: String, email });
const Group = mongoose.model('Group', groupSchema);
const doc = new Group({
name: 'Engineering',
email: 'dev@mongoosejs.io',
members: [{ name: 'Val', email: 'val@mongoosejs.io' }]
});
// Removes `email` from both top-level document **and** array elements
// { name: 'Engineering', members: [{ name: 'Val' }] }
doc.toObject({ transform: (doc, ret) => { delete ret.email; return ret; } });
Преобразования, как и все эти параметры, также доступны для toJSON. См. этот справочник по JSON.stringify(), чтобы узнать, почему toJSON() и toObject() — это отдельные функции.
См. параметры схемы для получения дополнительной информации.
Во время сохранения никакие пользовательские параметры не применяются к документу перед отправкой в базу данных.
Document.prototype.toString()
Возвращает:
- «Строка»
Утилита для console.log
Document.prototype.unmarkModified()
Параметры:
-
path«Строка» путь для снятия отметки о модификации
Очищает состояние модификации указанного пути.
Пример:
doc.foo = 'bar';
doc.unmarkModified('foo');
doc.save(); // changes to foo will not be persisted
Document.prototype.updateOne()
Параметры:
-
doc«Объект» -
[options]«Объект» необязательно, см.Query.prototype.setOptions() -
[options.lean]«Объект» если имеет истинное значение, mongoose вернёт документ как обычный JavaScript-объект, а не как документ mongoose. См.Query.lean()и учебник по Mongoose lean. -
[options.strict]«Булево|Строка» переопределяет параметр схемы строгого режима -
[options.timestamps=null]«Булево» если установленоfalseи времена маркировки на уровне схемы включены, пропустить времена маркировки для этого обновления. Обратите внимание, что это позволяет переопределить времена маркировки. Не делает ничего, если времена маркировки на уровне схемы не заданы. -
[callback]«Функция»
Возвращает:
- «Запрос»
См.:
Отправляет команду updateOne с этим документом _id в качестве селектора запроса.
Пример:
weirdCar.updateOne({$inc: {wheels:1}}, { w: 1 }, callback);
Допустимые параметры:
- аналогично Model.updateOne
Document.prototype.validate()
Параметры:
-
[pathsToValidate]«Массив|Строка» список путей для валидации. Если задано, Mongoose проверит только изменённые пути, которые находятся в этом списке. -
[options]«Объект» внутренние параметры -
[options.validateModifiedOnly=false]«Булево» еслиtruemongoose проверяет только изменённые пути. -
[options.pathsToSkip]«Массив|строка» список путей для пропуска. Если задано, Mongoose проверит каждый изменённый путь, который не находится в этом списке.
Возвращает:
- «Promise» Возвращает Promise.
Выполняет зарегистрированные правила валидации для этого документа.
Примечание:
Этот метод вызывается pre сохранения, и если правило валидации нарушено, сохранение прерывается, и ошибка выбрасывается.
Пример:
await doc.validate({ validateModifiedOnly: false, pathsToSkip: ['name', 'email']});
Document.prototype.validateSync()
Параметры:
-
[pathsToValidate]«Array|string» только валидирует заданные пути -
[options]«Object» параметры для валидации -
[options.validateModifiedOnly=false]«Boolean» Еслиtrue, Mongoose будет валидировать только изменённые пути, а не изменённые пути иrequiredпути. -
[options.pathsToSkip]«Array|string» список путей для пропуска. Если задано, Mongoose будет валидировать каждый изменённый путь, который не находится в этом списке.
Возвращает:
- «ValidationError,undefined,void» ValidationError, если при валидации произошли ошибки, или undefined, если ошибок нет.
Выполняет зарегистрированные правила валидации (пропуская асинхронные валидаторы) для этого документа.
Примечание:
Этот метод полезен, если вам нужна синхронная валидация.
Пример:
const err = doc.validateSync();
if (err) {
handleError(err);
} else {
// validation passed
}
© 2010 LearnBoost
Licensed under the MIT License.
https://mongoosejs.com/docs/api/document.html