Spec-Zone.ru › Mongoose

Документ

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
См.:
  • Document.populate

Принимает заполненное поле и возвращает его в незаполненное состояние.

Пример:

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

Устаревший псевдоним для $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.
См.:
  • заполнение
  • Query#select
  • Model.populate

Заполняет пути существующего документа.

Пример:

// 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] «Функция»
Возвращает:
  • «Запрос»
См.:
  • Model.replaceOne

Отправляет команду 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 в противном случае.
См.:
  • middleware

Сохраняет этот документ, вставляя новый документ в базу данных, если 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-символьные шестнадцатеричные строки.
Возвращает:
  • «Объект»
См.:
  • Document#toObject
  • JSON.stringify() в JavaScript

Значение, возвращаемое этим методом, используется в вызовах 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 в схеме.
Возвращает:
  • «Объект» js объект (не POJO)
См.:
  • mongodb.Binary

Преобразует этот документ в обычный 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] «Функция»
Возвращает:
  • «Запрос»
См.:
  • Model.updateOne

Отправляет команду updateOne с этим документом _id в качестве селектора запроса.

Пример:

weirdCar.updateOne({$inc: {wheels:1}}, { w: 1 }, callback);

Допустимые параметры:

  • аналогично Model.updateOne

Document.prototype.validate()

Параметры:
  • [pathsToValidate] «Массив|Строка» список путей для валидации. Если задано, Mongoose проверит только изменённые пути, которые находятся в этом списке.
  • [options] «Объект» внутренние параметры
    • [options.validateModifiedOnly=false] «Булево» если true mongoose проверяет только изменённые пути.
    • [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

Spec-Zone.ru

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