使用嵌套对象(例如对象数组)创建文档时,每个对象都有自己的_id。例如,我的模式是这样的:Mongoose将_id添加到所有嵌套对象中
mongoose = require "mongoose"
Schema = mongoose.Schema
schema = new Schema
name:
type: String
required: true
unique: true
trim: true
lists: [
list:
type: Schema.Types.ObjectId
required: true
ref: "List"
allocations: [
allocation:
type: Number
required: true
]
]
createdAt:
type: Date
default: Date.now
updatedAt:
type: Date
# Ensure virtual fields are serialised.
schema.set "toJSON",
virtuals: true
exports = module.exports = mongoose.model "Portfolio", schema
的lists
阵列中的每个对象被赋予一个_id,因为是每个allocation
对象lists.allocations
数组中,最终被创建的文档时。这似乎是矫枉过正和膨胀的文件,但是有没有一个原因MongoDB(或Mongoose)需要该文件包含这些额外的信息?如果没有,我想阻止它发生,以便唯一的_id位于根文档中。
此外,猫鼬会自动创建一个虚拟id
为_id
,这是我需要的,因为我的客户端代码期望一个场id
。这就是为什么我使用JSON返回虚拟。但是,因为在整个文档中都有_id
字段,而不仅仅是根,所以这个虚拟字段重复了全部。如果没有办法阻止额外的_id字段,我怎样才能得到一个虚拟只适用于根文档_id?或者如果有更好的方法去做我想要做的事情,它会是什么?
在版本(3.6),我能够简单地添加_id:假到主模式中的subdoc,而不需要制作单独的子模式 – cyberwombat
如果您正在寻找JavaScript解决方案:http://stackoverflow.com/questions/17254008/stop-mongoose-from-created-ids-for- subdocument-arrays –