Stop Mongoose from creating _id property for sub-d

2018-12-31 19:02发布

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?

5条回答
旧时光的记忆
2楼-- · 2018-12-31 19:21

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楼-- · 2018-12-31 19:23

In mongoose v.3 now you have alternative way to create sub-documents without parents - children relations. And these sub-docs will not have index

var mongoose = require("mongoose");

var schema = mongoose.Schema({
  // schema content
subSchema: [{
    firstname: 'sub name',
    lastname: 'last name'
  }]
});

var model = mongoose.model('tablename', schema);
查看更多
心情的温度
4楼-- · 2018-12-31 19:29

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楼-- · 2018-12-31 19:42

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
   }
}
查看更多
唯独是你
6楼-- · 2018-12-31 19:44

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);
查看更多
登录 后发表回答