サブドキュメント配列がある場合、Mongooseは各配列のIDを自動的に作成します。例:
{
_id: "mainId"
subDocArray: [
{
_id: "unwantedId",
field: "value"
},
{
_id: "unwantedId",
field: "value"
}
]
}
Mongooseに配列内のオブジェクトのIDを作成しないように指示する方法はありますか?
これは簡単です。サブスキーマでこれを定義できます。
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"
}
]
}
いずれかを使用できます
var subSchema = mongoose.Schema({
//subschema fields
},{ _id : false });
または
var subSchema = mongoose.Schema({
//subschema content
_id : false
});
2番目のオプションを使用する前に、mongooseのバージョンを確認してください