我想将_id变量转换为id。
所以我想在我要创建的所有模式中添加虚拟'id'字段,只要我访问模型的'id'字段,就会返回'_id'的值。
来自文档http://mongoosejs.com/docs/2.7.x/docs/virtuals.html 我发现,首先我必须创建模式然后单独应用虚拟'id'字段。
我想简单地将虚拟字段添加到基础mongoose.Schema
,然后每当我创建新模式时,所有模式都将具有虚拟字段,而无需对每个模式进行任何手动操作。
编辑:
我也在使用Backbone.Model,我为每个模型创建了一个'id'字段。如果我在前端代码中得到简单的使用id,我得到id字段不存在的错误。但是当我将idAttribute设置为每个模型的“_id”时,一切都顺利。这意味着骨干模型想拥有_id,而mongoose模式背后的原因是_id不是id。那我可以解释一下,mongoose不会自动添加映射到_id的虚拟ID吗?如果我错了,请纠正我。
答案 0 :(得分:1)
对于主干,“id”是它的默认idAttribute名称,所以不要在那里添加任何代码,一切都会按预期工作。
对于猫鼬而言,答案归结为“它很复杂”,但主要观点是:
.toJSON
不包含虚拟内容,因此当您在浏览器中将mongoose文档发送到主干网时,它只是“_id”而不是“id”myModelInstance.toJSON({virtuals: true})
。你会得到“_id”和“id”// specify the transform schema option
if (!schema.options.toJSON) schema.options.toJSON = {};
schema.options.toJSON.transform = function (doc, ret, options) {
// remove the _id of every document before returning the result
delete ret._id;
}
schema.options.toJSON.virtuals = true;