【问题标题】:Mongoose: in an array of objects expecting custom property named id but getting also default _idMongoose:在期望名为 id 的自定义属性但也获得默认 _id 的对象数组中
【发布时间】:2017-10-06 12:43:54
【问题描述】:

我有一个类似如下的架构:

const userSchema = mongoose.Schema({
    // Other properties here

    userMaterials: [{ title: String, category: String, id: String }]
});

用户应该发布一个材料,每个材料都添加到 userMaterial 数组中。

材质是一个物体,看起来像这样:

let material = {
    id: dbMaterial.id.toString(),
    title: dbMaterial.title,
    category: req.body.category
};

保存两次(只是为了测试会发生什么)相同的材质对象后,我在数据库中发现的是一个额外的_id。

userMaterials:
   [ { _id: 59105a5810400d7cde1d8e50,
       category: 'want-to-watch',
       title: 'jQuery Fundamentals',
       id: 590f7826f55f2e2814d113f8 },
     { _id: 59105df83369cd7fa49c9ac1,
       category: 'want-to-watch',
       title: 'jQuery Fundamentals',
       id: 590f7826f55f2e2814d113f8 } ]

我没想到额外的 _id 字段,数组内的对象不是子架构或其他东西。顺便说一句,当架构更改为 userMaterials: [] 一切都很好我得到了我实际期望的结果 - 未修改的材质对象被推入数组。

那么你能解释一下是什么让 mongoose 创建了 _id 字段吗??

【问题讨论】:

    标签: mongoose mongoose-schema


    【解决方案1】:

    据我所知,添加了_id 用于查询子文档。如果要禁用在数组内部自动创建_id,可以添加_id: false。您更新后的架构将如下所示:

    const userSchema = mongoose.Schema({
        // Other properties here
    
        userMaterials: [{ title: String, category: String, id: String, _id: false }]
    });
    

    如果您想了解更多信息,请参阅documentation 关于_id

    【讨论】:

      猜你喜欢
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-16
      • 2011-09-03
      • 2019-03-05
      • 2015-06-09
      相关资源
      最近更新 更多