问题
If you have subdocument arrays, Mongoose automatically creates ids for each one. Example:
{
_id: \"mainId\"
subDocArray: [
{
_id: \"unwantedId\",
field: \"value\"
},
{
_id: \"unwantedId\",
field: \"value\"
}
]
}
Is there a way to tell Mongoose to not create ids for objects within an array?
回答1:
It's simple, you can define this in the subschema :
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:
You can create sub-documents without schema and avoid _id. Just add _id:false to your subdocument declaration.
var schema = new mongoose.Schema({
field1:{type:String},
subdocArray:[{
_id:false,
field :{type:String}
}]
});
This will prevent the creation of an _id field in your subdoc. Tested in Mongoose 3.8.1
回答3:
Additionally, if you use an object literal syntax for specifying a sub-schema, you may also just add _id: false
to supress it.
{
sub: {
property1: String,
property2: String,
_id: false
}
}
回答4:
I'm using mongoose 4.6.3 and all I had to do was add _id: false in the schema, no need to make a subschema.
{
_id: ObjectId
subDocArray: [
{
_id: false,
field: "String"
}
]
}
回答5:
You can use either of the one
var subSchema = mongoose.Schema({
//subschema fields
},{ _id : false });
or
var subSchema = mongoose.Schema({
//subschema content
_id : false
});
Check your mongoose version before using the second option
来源:https://stackoverflow.com/questions/17254008/stop-mongoose-from-creating-id-property-for-sub-document-array-items