web-dev-qa-db-ja.com

Mongooseがサブドキュメント配列アイテムの_idプロパティを作成しないようにします

サブドキュメント配列がある場合、Mongooseは各配列のIDを自動的に作成します。例:

{
    _id: "mainId"
    subDocArray: [
      {
        _id: "unwantedId",
        field: "value"
      },
      {
        _id: "unwantedId",
        field: "value"
      }
    ]
}

Mongooseに配列内のオブジェクトのIDを作成しないように指示する方法はありますか?

190
Atlas

これは簡単です。サブスキーマでこれを定義できます。

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);
239
throrin19

スキーマなしでサブドキュメントを作成し、_idを避けることができます。サブドキュメント宣言に_id:falseを追加するだけです。

var schema = new mongoose.Schema({
   field1:{type:String},
   subdocArray:[{
      _id:false,
      field :{type:String}
   }]
});

これにより、サブドキュメントに_idフィールドが作成されなくなります。 Mongoose 3.8.1でテスト済み

113
Joel Grenon

さらに、サブスキーマの指定にオブジェクトリテラル構文を使用する場合は、_id: falseを追加してそれを抑制することもできます。

{
   sub: {
      property1: String,
      property2: String,
      _id: false
   }
}
39
wlingke

私はmongoose 4.6.3を使用しており、スキーマで_id:falseを追加するだけで、サブスキーマを作成する必要はありませんでした。

{
    _id: ObjectId
    subDocArray: [
      {
        _id: false,
        field: "String"
      }
    ]
}
19
jemiloii

いずれかを使用できます

var subSchema = mongoose.Schema({
//subschema fields    

},{ _id : false });

または

var subSchema = mongoose.Schema({
//subschema content
_id : false    

});

2番目のオプションを使用する前に、mongooseのバージョンを確認してください

0
Deeksha Sharma