Какова цель объявления mongoose.Schema.Types.ObjectId? - PullRequest
0 голосов
/ 26 сентября 2018

Я просматривал некоторый код nodejs / mongoose и понял, что есть некоторые коды, которые явно определяют поле _id при попытке сохранить данные в mongodb-mongoose.

Пример

var personSchema = Schema({
    _id: mongoose.Schema.Types.ObjectId,
    name: String,
    age: Number,
    stories: [{ type: Schema.Types.ObjectId, ref: 'Story' }]
});

Мне известно, что документам в Mongodb по умолчанию присваивается уникальное поле _id.Тогда почему кто-то все еще хочет определить «_id: mongoose.Schema.Types.ObjectId», в чем это преимущество?Я имею в виду, определяют ли они или нет, это все еще будет там?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Схема Mongoose, предназначенная для добавления поля _id в каждую созданную запись, будь то документ или вложенный документ (встроенный).

Объявление поля _id полезно в схеме, только если вы хотите встроить некоторые полямодельный документ в качестве вложенного документа вместо добавления ref с исходным идентификатором, в противном случае он добавит вновь созданный ObjectId как _id в схему вложенного документа.

0 голосов
/ 26 сентября 2018

Технически нет изменений между его объявлением или нет на верхнем уровне схемы.


Как указано в документации для mongoose :

Mongooseприсваивает каждой вашей схеме поле _id по умолчанию, если оно не передается в конструктор схемы.Назначенный тип - это ObjectId, совпадающий с поведением MongoDB по умолчанию.


Некоторые люди могут добавить его, чтобы сделать его явным: поле _id существует, и оно является ObjectId.



ПРИМЕЧАНИЕ о том, что в подсхеме _id можно отключить с помощью опции _id

опция :

_id Mongoose присваивает каждой вашей схеме поле _id по умолчанию, если оно не передается в конструктор схемы.Назначенный тип - это ObjectId, совпадающий с поведением MongoDB по умолчанию.Если вы вообще не хотите, чтобы _id добавлялся в вашу схему, вы можете отключить его, используя этот параметр.

Этот параметр можно использовать только в поддокументах.Mongoose не может сохранить документ, не зная его идентификатора, поэтому вы получите сообщение об ошибке, если попытаетесь сохранить документ без _id.

// default behavior
var schema = new Schema({ name: String });
var Page = mongoose.model('Page', schema);
var p = new Page({ name: 'mongodb.org' });
console.log(p); // { _id: '50341373e894ad16347efe01', name: 'mongodb.org' }

// disabled _id
var childSchema = new Schema({ name: String }, { _id: false });
var parentSchema = new Schema({ children: [childSchema] });

var Model = mongoose.model('Model', parentSchema);

Model.create({ children: [{ name: 'Luke' }] }, function(error, doc) {
  // doc.children[0]._id will be undefined
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...