【问题标题】:Mongoose schema猫鼬模式
【发布时间】:2016-08-05 01:43:59
【问题描述】:

我有这些猫鼬模式:

var ItemSchema = new Schema({
    "pieces": Number, 
    "item": { type: Schema.Types.ObjectId, ref: 'Items' }
});

var cartSchema= new Schema({
    "items": [ItemSchema]
});

但是当我想在 items 中推送新项目时,猫鼬会添加一个 _id 字段(在新项目上),但我不明白为什么。

【问题讨论】:

标签: javascript node.js mongodb mongoose


【解决方案1】:

如果您想添加没有_id 字段的项目,那么您应该在ItemSchema 中添加{ _id: false }

var ItemSchema = new Schema({
    "pieces": Number, 
    "item": { type: Schema.Types.ObjectId, ref: 'Items' }
}, { _id: false });

【讨论】:

    【解决方案2】:

    默认情况下,如果未将一个 _id 字段传递给 Schema 构造函数,Mongoose 会为您的每个模式分配一个 _id 字段。分配的类型是 ObjectId 以符合 MongoDB 的默认行为。如果您根本不想将 _id 添加到您的架构中,您可以使用此选项禁用它。

    您只能在子文档上使用此选项。 Mongoose 无法在不知道其 id 的情况下保存文档,因此如果您尝试在没有 _id 的情况下保存文档时会出错。

    链接:http://mongoosejs.com/docs/guide.html#_id

    【讨论】:

    • 没有。我发现我可以用{ _id: false }删除_id字段@
    • 您只能在子文档上使用此选项。 Mongoose 无法在不知道其 id 的情况下保存文档,因此如果您尝试在没有 _id 的情况下保存文档时会出错。
    • 事实上我想删除子文档上的 _id 字段
    • 你的问题应该更清楚。不用担心...你能接受这个答案吗?
    猜你喜欢
    • 2020-09-18
    • 2012-02-02
    • 2021-09-21
    • 2015-05-20
    • 2013-01-25
    • 2012-04-22
    • 2018-02-05
    • 2019-03-22
    • 2018-06-11
    相关资源
    最近更新 更多