我想将_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吗?如果我错了,请纠正我 .
1 回答
对于主干,“id”是它的默认idAttribute名称,所以不要在那里添加任何代码,一切都将按预期工作 .
对于猫鼬而言,答案归结为“它很复杂”,但要点主要是:
默认情况下,mongoose会为每个模式提供一个名为"id"的虚拟文件,它将文档的_id作为字符串
但是,默认情况下
.toJSON
不包含虚拟内容,因此当您在浏览器中将mongoose文档发送到主干时,它只会"_id"而不是"id"要快速获取包含虚拟内容的JSON表示,请使用
myModelInstance.toJSON({virtuals: true})
. 你会得到"_id"和"id"您需要阅读transform options for toObject and toJSON以全面了解您可以做什么以及如何做,但要点是(基于直接来自文档的示例)