Если у вас есть массивы поддокументов, Mongoose автоматически создает идентификаторы для каждого из них. Пример:
{
_id: "mainId"
subdocArray: [
{
_id: "unwantedId",
field: "value"
},
{
_id: "unwantedId",
field: "value"
}
]
}
Есть ли способ сказать Mongoose не создавать идентификаторы для объектов внутри массива?
Это просто, вы можете определить это в подсхеме:
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);
Вы можете создавать субдокументы без схемы и избегать _id. Просто добавьте _id: false в ваше объявление вложенного документа.
var schema = new mongoose.Schema({
field1:{type:String},
subdocArray:[{
_id:false,
field :{type:String}
}]
});
Это предотвратит создание поля _id в вашем поддоке. Протестировано в Mongoose 3.8.1
Кроме того, если вы используете синтаксис литерала объекта для указания подсхемы, вы также можете просто добавить _id: false
, чтобы подавить его.
{
sub: {
property1: String,
property2: String,
_id: false
}
}
Я использую mongoose 4.6.3, и все, что мне нужно было сделать, это добавить _id: false в схему, не нужно делать подсхему.
{
_id: ObjectId
subdocArray: [
{
_id: false,
field: "String"
}
]
}
_id
это поле, а не ограничение.
В 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);
_id
поля даже в коллекции подсхемы, или только в том случае , когда подсхемы который используется для встраивания в массив элементов суб-документа? Я спрашиваю об этом, в частности, из-за моего собственного вопроса о SO сегодня.{ _id: false }
, оба уровня подсхемы не имеют идентификаторов. Есть ли способ обойти это поведение?