Остановить Mongoose от создания свойства _id для элементов массива поддокумента
Если у вас есть массивы поддокументов, Mongoose автоматически создает идентификаторы для каждого из них. Пример:
{
_id: "mainId"
subdocArray: [
{
_id: "unwantedId",
field: "value"
},
{
_id: "unwantedId",
field: "value"
}
]
}
Есть ли способ сказать Mongoose не создавать идентификаторы для объектов внутри массива?
Ответы
Ответ 1
Это просто, вы можете определить это в подсхеме:
var mongoose = require("mongoose");
var subSchema = mongoose.Schema({
//your subschema content
},{ _id : false });
var schema = mongoose.Schema({
// schema content
subSchemaCollection : [subSchema]
});
var model = mongoose.model('tablename', schema);
Ответ 2
Вы можете создавать субдокументы без схемы и избегать _id. Просто добавьте _id: false в ваше объявление вложенного документа.
var schema = new mongoose.Schema({
field1:{type:String},
subdocArray:[{
_id:false,
field :{type:String}
}]
});
Это предотвратит создание поля _id в вашем поддоке. Протестировано в Mongoose 3.8.1
Ответ 3
Кроме того, если вы используете синтаксис литерала объекта для указания подсхемы, вы также можете просто добавить _id: false
, чтобы подавить его.
{
sub: {
property1: String,
property2: String,
_id: false
}
}
Ответ 4
Я использую mongoose 4.6.3, и все, что мне нужно было сделать, это добавить _id: false в схему, не нужно делать подсхему.
{
_id: ObjectId
subdocArray: [
{
_id: false,
field: "String"
}
]
}
Ответ 5
В mongoose v.3 теперь у вас есть альтернативный способ создания поддокументов без отношений родителей и детей. И эти субдоки не будут иметь индекс
var mongoose = require("mongoose");
var schema = mongoose.Schema({
// schema content
subSchema: [{
firstname: 'sub name',
lastname: 'last name'
}]
});
var model = mongoose.model('tablename', schema);