Схема
Схема()
Параметры:
-
[definition]«Объект|Схема|Массив» Может быть одним из: объект, описывающий пути схемы, или схема для копирования, или массив объектов и схем -
[options]«Объект»
Наследует:
Конструктор схемы.
Пример:
const child = new Schema({ name: String });
const schema = new Schema({ name: String, age: Number, children: [child] });
const Tree = mongoose.model('Tree', schema);
// setting schema options
new Schema({ name: String }, { _id: false, autoIndex: false })
Параметры:
- autoIndex: bool - по умолчанию null (что означает использование параметра autoIndex соединения)
- autoCreate: bool - по умолчанию null (что означает использование параметра autoCreate соединения)
- bufferCommands: bool - по умолчанию true
-
bufferTimeoutMS: число - по умолчанию 10000 (10 секунд). Если
bufferCommandsвключено, это время, которое Mongoose будет ждать восстановления подключения перед ошибкой. - capped: bool | число | объект - по умолчанию false
- collection: строка - без значения по умолчанию
-
discriminatorKey: строка - по умолчанию
__t - id: bool - по умолчанию true
- _id: bool - по умолчанию true
- minimize: bool - управляет поведением document#toObject при его ручном вызове - по умолчанию true
- read: строка
- writeConcern: объект - по умолчанию null, используется для переопределения параметров write concern MongoDB сервера
-
shardKey: объект - по умолчанию
null - strict: bool - по умолчанию true
- strictQuery: bool - по умолчанию false
- toJSON - объект - без значения по умолчанию
- toObject - объект - без значения по умолчанию
- typeKey - строка - по умолчанию 'type'
-
validateBeforeSave - bool - по умолчанию
true -
validateModifiedOnly - bool - по умолчанию
false - versionKey: строка или объект - по умолчанию "__v"
- optimisticConcurrency: bool - по умолчанию false. Установите в true, чтобы включить оптимистическую конкурентность.
- collation: объект - по умолчанию null (что означает отсутствие сортировки)
- timeseries: объект - по умолчанию null (что означает, что коллекция этой схемы не будет коллекцией временных рядов)
-
selectPopulatedPaths: boolean - по умолчанию
true - skipVersioning: объект - пути, которые нужно исключить из версиирования
-
timestamps: объект или boolean - по умолчанию
false. Если true, Mongoose добавляетcreatedAtиupdatedAtсвойства к вашей схеме и управляет этими свойствами за вас. -
pluginTags: массив строк - по умолчанию
undefined. Если задано и плагин вызван с параметромtags, плагин будет применен только к схемам с совпадающим тегом. -
virtuals: объект - виртуальные свойства для определения, алиас для
.virtual - [collectionOptions]: объект с параметрами, передаваемыми в
createCollection()при вызовеModel.createCollection()илиautoCreateустановлены в true.
Параметры для вложенных схем:
-
excludeIndexes: bool - по умолчаниюfalse. Еслиtrue, пропуск построения индексов по путям этой схемы.
Примечание:
При вложении схем (children в примере выше), всегда сначала объявляйте дочернюю схему, прежде чем передавать её в родительскую.
Схема.Типы
Тип:
- «свойство»
Различные встроенные типы схем Mongoose.
Пример:
const mongoose = require('mongoose');
const ObjectId = mongoose.Schema.Types.ObjectId;
Типы:
Используя этот доступ к типу схемы Mixed, мы можем использовать их в нашей схеме.
const Mixed = mongoose.Schema.Types.Mixed;
new mongoose.Schema({ _user: Mixed })
Схема.типыИндексов
Тип:
- «свойство»
Разрешенные типы индексов
Схема.прототип.добавить()
Параметры:
-
obj«Объект|Схема» простой объект с путями для добавления или другая схема -
[prefix]«Строка» путь для префикса новых добавленных путей
Возвращает:
- «Схема» экземпляр схемы
Добавляет пары ключевых путей/типов схемы к этой схеме.
Пример:
const ToySchema = new Schema();
ToySchema.add({ name: 'string', color: 'string', price: 'number' });
const TurboManSchema = new Schema();
// You can also `add()` another schema and copy over all paths, virtuals,
// getters, setters, indexes, methods, and statics.
TurboManSchema.add(ToySchema).add({ year: Number });
Схема.прототип.псевдоним()
Параметры:
-
path«Строка» реальный путь для псевдонима -
alias«Строка|Массив[Строка]» путь(и) для использования в качестве псевдонима дляpath
Возвращает:
- «Схема» экземпляр схемы
Добавить псевдоним для path. Это означает, что получение или установка alias эквивалентно получению или установке path.
Пример:
const toySchema = new Schema({ n: String });
// Make 'name' an alias for 'n'
toySchema.alias('n', 'name');
const Toy = mongoose.model('Toy', toySchema);
const turboMan = new Toy({ n: 'Turbo Man' });
turboMan.name; // 'Turbo Man'
turboMan.n; // 'Turbo Man'
turboMan.name = 'Turbo Man Action Figure';
turboMan.n; // 'Turbo Man Action Figure'
await turboMan.save(); // Saves { _id: ..., n: 'Turbo Man Action Figure' }
Схема.прототип.вложенныеСхемы
Тип:
- «свойство»
Массив дочерних схем (из массивов документов и отдельных вложенных поддокументов) и соответствующих скомпилированных моделей. Каждый элемент массива — объект с 2 свойствами: schema и model.
Это свойство обычно полезно только авторам плагинов и продвинутым пользователям. Вам не нужно взаимодействовать с этим свойством, чтобы использовать mongoose.
Схема.прототип.очиститьИндексы()
Возвращает:
- «Схема» экземпляр схемы
Удаляет все индексы из этой схемы.
clearIndexes удаляет индексы только из вашего объекта схемы. Не влияет на индексы в MongoDB.
Пример:
const ToySchema = new Schema({ name: String, color: String, price: Number });
ToySchema.index({ name: 1 });
ToySchema.index({ color: 1 });
// Remove all indexes on this schema
ToySchema.clearIndexes();
ToySchema.indexes(); // []
Схема.прототип.клонировать()
Возвращает:
- «Схема» клонированная схема
Возвращает глубокую копию схемы
Пример:
const schema = new Schema({ name: String });
const clone = schema.clone();
clone === schema; // false
clone.path('name'); // SchemaString { ... }
Схема.прототип.дискриминатор()
Параметры:
-
name«Строка» имя дискриминатора -
schema«Схема» дискриминируемая схема
Возвращает:
- «Схема» экземпляр схемы
Наследовать схему, применяя дискриминатор к существующей схеме.
Пример:
const eventSchema = new mongoose.Schema({ timestamp: Date }, { discriminatorKey: 'kind' });
const clickedEventSchema = new mongoose.Schema({ element: String }, { discriminatorKey: 'kind' });
const ClickedModel = eventSchema.discriminator('clicked', clickedEventSchema);
const Event = mongoose.model('Event', eventSchema);
Event.discriminators['clicked']; // Model { clicked }
const doc = await Event.create({ kind: 'clicked', element: '#hero' });
doc.element; // '#hero'
doc instanceof ClickedModel; // true
Схема.прототип.каждыйПуть()
Параметры:
-
fn«Функция» функция обратного вызова
Возвращает:
- «Схема» это
Итерирует пути схем, аналогично Array#forEach.
Обратный вызов получает имя пути и экземпляр schemaType.
Пример:
const userSchema = new Schema({ name: String, registeredAt: Date });
userSchema.eachPath((pathname, schematype) => {
// Prints twice:
// name SchemaString { ... }
// registeredAt SchemaDate { ... }
console.log(pathname, schematype);
});
Схема.прототип.получить()
Параметры:
-
key«Строка» Имя параметра для получения текущего значения
Возвращает:
- «Любое» значение параметра
Получает параметр схемы.
Пример:
schema.get('strict'); // true
schema.set('strict', false);
schema.get('strict'); // false
Схема.прототип.индекс()
Параметры:
-
fields«Объект» Поля для индексирования, в порядке, доступные значения:1 | -1 | '2d' | '2dsphere' | 'geoHaystack' | 'hashed' | 'text' -
[options]«Объект» Параметры для передачи в функцию MongoDB драйвераcreateIndex() -
[options.expires=null]«Строка|число» Mongoose-специфичный синтаксический сахар, использует ms для преобразования параметраexpiresв секунды дляexpireAfterSecondsв ссылке выше. -
[options.language_override=null]«Строка» Указывает mongodb использовать указанное поле вместоlanguageдля разбора текстовых индексов.
Определяет индекс (вероятно, составной) для этой схемы.
Пример:
schema.index({ first: 1, last: -1 })
Schema.prototype.indexes()
Возвращает:
- «Массив» список индексов, определённых в схеме
Возвращает список индексов, объявленных этой схемой, через schema.index() или по index: true в параметрах пути. Индексы выражаются как массив [spec, options].
Пример:
const userSchema = new Schema({
email: { type: String, required: true, unique: true },
registeredAt: { type: Date, index: true }
});
// [ [ { email: 1 }, { unique: true, background: true } ],
// [ { registeredAt: 1 }, { background: true } ] ]
userSchema.indexes();
Плагины могут использовать возвращаемое значение этой функции для изменения индексов схемы. Например, указанный ниже плагин по умолчанию делает каждый индекс уникальным.
function myPlugin(schema) {
for (const index of schema.indexes()) {
if (index[1].unique === undefined) {
index[1].unique = true;
}
}
}
Schema.prototype.loadClass()
Параметры:
-
model«Функция» Класс для загрузки -
[virtualsOnly]«Логическое значение» если имеет истинное значение, извлекает только виртуальные значения из класса, а не методы или статические свойства
Загружает ES6 класс в схему. Отображает сеттеры + геттеры, статические методы и методы экземпляра в схему виртуальные, статические и методы.
Пример:
const md5 = require('md5');
const userSchema = new Schema({ email: String });
class UserClass {
// `gravatarImage` becomes a virtual
get gravatarImage() {
const hash = md5(this.email.toLowerCase());
return `https://www.gravatar.com/avatar/${hash}`;
}
// `getProfileUrl()` becomes a document method
getProfileUrl() {
return `https://mysite.com/${this.email}`;
}
// `findByEmail()` becomes a static
static findByEmail(email) {
return this.findOne({ email });
}
}
// `schema` will now have a `gravatarImage` virtual, a `getProfileUrl()` method,
// and a `findByEmail()` static
userSchema.loadClass(UserClass);
Schema.prototype.method()
Параметры:
-
name«Строка|Объект» Имя метода для одной функции или объект пар «имя-функция». -
[fn]«Функция» Функция в определении одной функции.
Добавляет метод экземпляра документам, созданным из моделей, скомпилированных из этой схемы.
Пример:
const schema = kittySchema = new Schema(..);
schema.method('meow', function () {
console.log('meeeeeoooooooooooow');
})
const Kitty = mongoose.model('Kitty', schema);
const fizz = new Kitty;
fizz.meow(); // meeeeeooooooooooooow
Если передаётся хеш пар имя/функция как единственный аргумент, каждая пара имя/функция добавляется как метод.
schema.method({
purr: function () {}
, scratch: function () {}
});
// later
const fizz = new Kitty;
fizz.purr();
fizz.scratch();
ПРИМЕЧАНИЕ: Schema.method() добавляет методы экземпляра в объект Schema.methods. Вы также можете добавить методы экземпляра непосредственно в объект Schema.methods, как показано в руководстве
Schema.prototype.obj
Тип:
- «свойство»
Исходный объект, переданный конструктору схемы
Пример:
const schema = new Schema({ a: String }).add({ b: String });
schema.obj; // { a: String }
Schema.prototype.omit()
Параметры:
-
paths«Массив[Строка]» Список путей для исключения из новой схемы -
[options]«Объект» Параметры для передачи конструктору новой схемы (аналогичноnew Schema(.., Options)). По умолчаниюthis.optionsесли не задано.
Возвращает:
- «Схема»
Возвращает новую схему, содержащую paths из исходной схемы, за вычетом исключённых.
Этот метод аналогичен функции Lodash's omit() для схем Mongoose.
Пример:
const schema = Schema({ name: String, age: Number });
// Creates a new schema omitting the `age` path
const newSchema = schema.omit(['age']);
newSchema.path('name'); // SchemaString { ... }
newSchema.path('age'); // undefined
Schema.prototype.path()
Параметры:
-
path«Строка» Имя пути для получения/установки -
[obj]«Объект» Тип для установки пути, если предоставлен, путь будет УСТАНОВЛЕН, иначе путь будет получен
Получение/установка путей схемы.
Устанавливает путь (если арность 2) Получает путь (если арность 1)
Пример:
schema.path('name') // returns a SchemaType
schema.path('name', Number) // changes the schemaType of `name` to Number
Schema.prototype.pathType()
Параметры:
-
path«Строка»
Возвращает:
- «Строка»
Возвращает тип пути path для этой схемы.
Принимая путь, возвращает, является ли он реальным, виртуальным, вложенным или случайным/неопределённым путём.
Пример:
const s = new Schema({ name: String, nested: { foo: String } });
s.virtual('foo').get(() => 42);
s.pathType('name'); // "real"
s.pathType('nested'); // "nested"
s.pathType('foo'); // "virtual"
s.pathType('fail'); // "adhocOrUndefined"
Schema.prototype.paths
Тип:
- «свойство»
Пути, определённые в этой схеме. Ключи — это пути верхнего уровня в этой схеме, а значения — экземпляры класса SchemaType.
Пример:
const schema = new Schema({ name: String }, { _id: false });
schema.paths; // { name: SchemaString { ... } }
schema.add({ age: Number });
schema.paths; // { name: SchemaString { ... }, age: SchemaNumber { ... } }
Schema.prototype.pick()
Параметры:
-
paths«Массив[Строка]» Список путей для выбора для новой схемы -
[options]«Объект» Параметры для передачи конструктору новой схемы (аналогичноnew Schema(.., Options)). По умолчаниюthis.optionsесли не задано.
Возвращает:
- «Схема»
Возвращает новую схему, содержащую выбранные paths из этой схемы.
Этот метод аналогичен функции Lodash's pick() для схем Mongoose.
Пример:
const schema = Schema({ name: String, age: Number });
// Creates a new schema with the same `name` path as `schema`,
// but no `age` path.
const newSchema = schema.pick(['name']);
newSchema.path('name'); // SchemaString { ... }
newSchema.path('age'); // undefined
Schema.prototype.plugin()
Параметры:
-
plugin«Функция» Обратный вызов плагина -
[opts]«Объект» Параметры для передачи плагину -
[opts.deduplicate=false]«Логическое значение» Если true, игнорировать повторяющиеся плагины (тот же аргументfnс использованием===).
См.:
Регистрирует плагин для этой схемы.
Пример:
const s = new Schema({ name: String });
s.plugin(schema => console.log(schema.path('name').path));
mongoose.model('Test', s); // Prints 'name'
Или с параметрами:
const s = new Schema({ name: String });
s.plugin((schema, opts) => console.log(opts.text, schema.path('name').path), { text: "Schema Path Name:" });
mongoose.model('Test', s); // Prints 'Schema Path Name: name'
Schema.prototype.post()
Параметры:
-
methodName«Строка|Регулярное выражение|Массив[Строка]» Имя метода или регулярное выражение для сопоставления имени метода -
[options]«Объект» -
[options.document]«Логическое значение» Еслиnameявляется хуком для промежуточных звеньев документов и запросов, установите значениеtrueдля запуска на промежуточном звене документов. -
[options.query]«Логическое значение» Еслиnameявляется хуком для промежуточных звеньев документов и запросов, установите значениеtrueдля запуска на промежуточном звене запросов. -
fn«Функция» обратный вызов
См.:
Определяет пост-хук для документа
const schema = new Schema(..);
schema.post('save', function (doc) {
console.log('this fired after a document was saved');
});
schema.post('find', function(docs) {
console.log('this fired after you ran a find query');
});
schema.post(/Many$/, function(res) {
console.log('this fired after you ran `updateMany()` or `deleteMany()`');
});
const Model = mongoose.model('Model', schema);
const m = new Model(..);
m.save(function(err) {
console.log('this fires after the `post` hook');
});
m.find(function(err, docs) {
console.log('this fires after the post find hook');
});
Schema.prototype.pre()
Параметры:
-
methodName«Строка|Регулярное выражение|Массив[Строка]» Имя метода или регулярное выражение для сопоставления имени метода -
[options]«Объект» -
[options.document]«Логическое значение» Еслиnameявляется хуком для промежуточных звеньев документов и запросов, установите значениеtrueдля запуска на промежуточном звене документов. Например, установитеoptions.documentвtrueдля применения этого хука кDocument#deleteOne()вместоQuery#deleteOne(). -
[options.query]«Логическое значение» Еслиnameявляется хуком для промежуточных звеньев документов и запросов, установите значениеtrueдля запуска на промежуточном звене запросов. -
callback«Функция»
Определяет пре-хук для модели.
Пример:
const toySchema = new Schema({ name: String, created: Date });
toySchema.pre('save', function(next) {
if (!this.created) this.created = new Date;
next();
});
toySchema.pre('validate', function(next) {
if (this.name !== 'Woody') this.name = 'Woody';
next();
});
// Equivalent to calling `pre()` on `find`, `findOne`, `findOneAndUpdate`.
toySchema.pre(/^find/, function(next) {
console.log(this.getFilter());
});
// Equivalent to calling `pre()` on `updateOne`, `findOneAndUpdate`.
toySchema.pre(['updateOne', 'findOneAndUpdate'], function(next) {
console.log(this.getFilter());
});
toySchema.pre('deleteOne', function() {
// Runs when you call `Toy.deleteOne()`
});
toySchema.pre('deleteOne', { document: true }, function() {
// Runs when you call `doc.deleteOne()`
});
Schema.prototype.queue()
Параметры:
-
name«Строка» имя метода документа, который нужно вызвать позже -
args«Массив» аргументы для передачи методу
Добавляет вызов метода в очередь.
Пример:
schema.methods.print = function() { console.log(this); };
schema.queue('print', []); // Print the doc every one is instantiated
const Model = mongoose.model('Test', schema);
new Model({ name: 'test' }); // Prints '{"_id": ..., "name": "test" }'
Schema.prototype.remove()
Параметры:
-
path«Строка|Массив» Путь(и) для удаления
Возвращает:
- «Схема» экземпляр схемы
Удаляет указанный path (или [paths]).
Пример:
const schema = new Schema({ name: String, age: Number });
schema.remove('name');
schema.path('name'); // Undefined
schema.path('age'); // SchemaNumber { ... }
Или как массив:
schema.remove(['name', 'age']);
schema.path('name'); // Undefined
schema.path('age'); // Undefined
Schema.prototype.removeIndex()
Параметры:
-
index«Объект|строка» имя или спецификация индекса
Возвращает:
- «Схема» экземпляр схемы
Удаляет индекс по имени или спецификации индекса.
removeIndex удаляет индексы только из вашего объекта схемы. Не влияет на индексы в MongoDB.
Пример:
const ToySchema = new Schema({ name: String, color: String, price: Number });
// Add a new index on { name, color }
ToySchema.index({ name: 1, color: 1 });
// Remove index on { name, color }
// Keep in mind that order matters! `removeIndex({ color: 1, name: 1 })` won't remove the index
ToySchema.removeIndex({ name: 1, color: 1 });
// Add an index with a custom name
ToySchema.index({ color: 1 }, { name: 'my custom index name' });
// Remove index by name
ToySchema.removeIndex('my custom index name');
Schema.prototype.removeVirtual()
Параметры:
-
path«String|Array» Пути виртуальных свойств (или нескольких путей), которые нужно удалить.
Удаляет указанные виртуальные свойства из схемы.
Schema.prototype.requiredPaths()
Параметры:
-
invalidate«Boolean» Обновить кэш
Возвращает:
- «Array»
Возвращает массив строк путей, которые требуются этой схемой.
Пример:
const s = new Schema({
name: { type: String, required: true },
age: { type: String, required: true },
notes: String
});
s.requiredPaths(); // [ 'age', 'name' ]
Schema.prototype.set()
Параметры:
-
key«String» Имя опции, значение которой нужно установить -
[value]«Object» Значение, на которое нужно установить опцию. Если не указано, опция будет сброшена до значения по умолчанию -
[tags]«Array<string>» теги для добавления в предпочтение чтения, если ключ === 'read'
См. также:
Устанавливает опцию схемы.
Пример:
schema.set('strict'); // 'true' by default
schema.set('strict', false); // Sets 'strict' to false
schema.set('strict'); // 'false'
Schema.prototype.static()
Параметры:
-
name«String|Object» Имя метода для отдельной функции или объект пар «имя-функция». -
[fn]«Function» Функция в определении отдельной функции.
См. также:
Добавляет статические методы «класса» к моделям, скомпилированным из этой схемы.
Пример:
const schema = new Schema(..);
// Equivalent to `schema.statics.findByName = function(name) {}`;
schema.static('findByName', function(name) {
return this.find({ name: name });
});
const Drink = mongoose.model('Drink', schema);
await Drink.findByName('LaCroix');
Если в качестве единственного аргумента передаётся хеш пар «имя-функция», каждая пара будет добавлена в качестве методов.
schema.static({
findByName: function () {..}
, findByCost: function () {..}
});
const Drink = mongoose.model('Drink', schema);
await Drink.findByName('LaCroix');
await Drink.findByCost(3);
Если в качестве единственного аргумента передаётся хеш пар «имя-функция», каждая пара будет добавлена в качестве статических методов.
Schema.prototype.virtual()
Параметры:
-
name«String» Имя виртуального свойства -
[options]«Object» -
[options.ref]«String|Model» имя модели или экземпляр модели. Помечает это как виртуальное свойство для популяции. -
[options.localField]«String|Function» Требуется для виртуальных свойств для популяции. См. документацию по виртуальным свойствам для популяции для получения дополнительной информации. -
[options.foreignField]«String|Function» Требуется для виртуальных свойств для популяции. См. документацию по виртуальным свойствам для популяции для получения дополнительной информации. -
[options.justOne=false]«Boolean|Function» Работает только с виртуальными свойствами для популяции. Если значение истинно, будет один документ илиnull. В противном случае виртуальное свойство для популяции будет массивом. -
[options.count=false]«Boolean» Работает только с виртуальными свойствами для популяции. Если значение истинно, это виртуальное свойство для популяции будет содержать количество документов, а не сами документы, когда выpopulate(). -
[options.get=null]«Function|null» Добавляет геттер к этому виртуальному свойству для преобразования загруженного документа. -
[options.match=null]«Object|Function» Применяет опцию по умолчаниюmatchдля популяции, добавляя дополнительный фильтр к запросу популяции.
Возвращает:
- «VirtualType»
Создаёт виртуальное свойство с заданным именем.
Schema.prototype.virtualpath()
Параметры:
-
name«String» Имя виртуального свойства, которое нужно получить
Возвращает:
- «VirtualType,null»
Возвращает виртуальное свойство с данным name.
Schema.prototype.virtuals
Тип:
- «свойство»
Объект, содержащий все виртуальные свойства, определённые в этой схеме. Ключи объекта — пути виртуальных свойств, а значения — экземпляры VirtualType.
Это свойство, как правило, полезно только для авторов плагинов и продвинутых пользователей. Вам не нужно взаимодействовать с этим свойством, чтобы использовать mongoose.
Пример:
const schema = new Schema({});
schema.virtual('answer').get(() => 42);
console.log(schema.virtuals); // { answer: VirtualType { path: 'answer', ... } }
console.log(schema.virtuals['answer'].getters[0].call()); // 42
Schema.reserved
Тип:
- «свойство»
Зарезервированные ключи документов.
Ключи в этом объекте — это имена, которые вызывают предупреждение при объявлении схемы, поскольку они могут нарушить функциональность Mongoose/плагинов Mongoose. Если вы создаёте схему с использованием new Schema() с одним из этих имён свойств, Mongoose выведет предупреждение.
- _posts
- _pres
- collection
- emit
- errors
- get
- init
- isModified
- isNew
- listeners
- modelName
- on
- once
- populated
- prototype
- remove
- removeListener
- save
- schema
- toObject
- validate
ПРИМЕЧАНИЕ: Использование этих терминов в качестве имён методов разрешено, но используйте на свой страх и риск, так как они могут быть существующими методами документов mongoose, которые вы перезаписываете.
const schema = new Schema(..);
schema.methods.init = function () {} // potentially breaking
© 2010 LearnBoost
Licensed under the MIT License.
https://mongoosejs.com/docs/api/schema.html