如果您有子文档数组,Mongoose会自动为每个数组创建ID。例如:
{
_id: "mainId"
subDocArray: [
{
_id: "unwantedId",
field: "value"
},
{
_id: "unwantedId",
field: "value"
}
]
}
有没有办法告诉Mongoose不为数组中的对象创建id?
答案 0 :(得分:228)
很简单,您可以在子模式中定义:
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);
答案 1 :(得分:109)
您可以创建没有架构的子文档,并避免使用_id。只需将_id:false添加到子文档声明中即可。
var schema = new mongoose.Schema({
field1:{type:String},
subdocArray:[{
_id:false,
field :{type:String}
}]
});
这将阻止在您的subdoc中创建_id字段。在Mongoose 3.8.1中测试
答案 2 :(得分:38)
此外,如果您使用对象文字语法来指定子架构,您也可以添加_id: false
来压制它。
{
sub: {
property1: String,
property2: String,
_id: false
}
}
答案 3 :(得分:17)
我使用的是mongoose 4.6.3,而我所要做的只是在架构中添加_id:false,而不需要制作子模式。
{
_id: ObjectId
subDocArray: [
{
_id: false,
field: "String"
}
]
}
答案 4 :(得分:3)
如果要使用预定义的架构(带有_id)作为子文档(不具有_id),则理论上可以按照以下步骤进行操作:
const sourceSchema = mongoose.Schema({
key : value
})
const subSourceSchema = sourceSchema.clone().set('_id',false);
但这对我不起作用。所以我补充说:
delete subSourceSchema.paths._id;
现在,我可以在不带_id的父文档中包含subSourceSchema。 我不确定这是否是一种干净的方法,但是它可以工作。
答案 5 :(得分:1)
您可以使用其中任何一个
var subSchema = mongoose.Schema({
//subschema fields
},{ _id : false });
或
var subSchema = mongoose.Schema({
//subschema content
_id : false
});
在使用第二个选项之前,请先检查您的猫鼬版本