首页 文章

阻止Mongoose为子文档数组项创建_id属性

提问于
浏览
159

如果您有子文档数组,Mongoose会自动为每个数组创建ID . 例:

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

有没有办法告诉Mongoose不为数组中的对象创建id?

5 回答

  • 95

    这很简单,您可以在子模式中定义:

    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);
    
  • -3

    您可以创建没有架构的子文档,并避免使用_id . 只需将_id:false添加到子文档声明中即可 .

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

    这将阻止在您的subdoc中创建_id字段 . 在Mongoose中测试3.8.1

  • 33

    此外,如果您使用对象文字语法来指定子模式,您也可以添加 _id: false 来压缩它 .

    {
       sub: {
          property1: String,
          property2: String,
          _id: false
       }
    }
    
  • 13

    我正在使用mongoose 4.6.3,而我所要做的就是在架构中添加_id:false,不需要创建子模式 .

    {
        _id: ObjectId
        subdocArray: [
          {
            _id: false,
            field: "String"
          }
        ]
    }
    
  • 203

    在mongoose v.3中,现在您可以使用其他方法创建没有父母的子文档 - 子关系 . 而这些子文档将没有索引

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

相关问题