Node.js 使用';通用';mongoose模式的虚拟
我想将_id变量转换为id 因此,我想将虚拟“id”字段添加到我要创建的所有模式中,每当我访问模型的“id”字段时,该字段将返回“\u id”的值 从文件中 我发现,首先我必须创建模式,然后分别应用虚拟“id”字段 我想简单地将虚拟字段添加到基本Node.js 使用';通用';mongoose模式的虚拟,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我想将_id变量转换为id 因此,我想将虚拟“id”字段添加到我要创建的所有模式中,每当我访问模型的“id”字段时,该字段将返回“\u id”的值 从文件中 我发现,首先我必须创建模式,然后分别应用虚拟“id”字段 我想简单地将虚拟字段添加到基本mongoose.Schema中,然后每当我创建一个新的模式时,所有模式都将具有虚拟字段,而无需对每个模式进行任何手动操作 编辑: 我也在使用Backbone.Model,我为每个模型创建了一个“id”字段。如果我在前端代码中得到simply use i
mongoose.Schema
中,然后每当我创建一个新的模式时,所有模式都将具有虚拟字段,而无需对每个模式进行任何手动操作
编辑:
我也在使用Backbone.Model,我为每个模型创建了一个“id”字段。如果我在前端代码中得到simply use id,我会得到id字段不存在的错误。但当我将idAttribute设置为每个模型的“\u id”时,一切都正常了。这意味着主干模型想要有_id,而mongoose模式背后的原因是_id不是id。那么我可以解释一下,mongoose不会自动添加映射到_id的虚拟id吗?如果我错了,请纠正我。对于主干,“id”是默认的idAttribute名称,所以不要在那里添加任何代码,一切都会正常工作
对于猫鼬来说,答案归结为“很复杂”,但要点是:
- 默认情况下,mongoose将为每个模式提供一个名为“id”的虚拟id,该id将作为文档的_id作为字符串
- 但是,默认情况下,
不包含虚拟对象,因此当您将mongoose文档发送到浏览器中的主干时,它只会得到“\u id”,而不是“id”.toJSON
- 要快速获得包含虚拟对象的JSON表示,请使用
。您将同时获得“\u id”和“id”mymodelcinstance.toJSON({virtuals:true})
- 你需要仔细阅读,全面了解你能做什么和如何做,但要点是(基于文档中的示例)
// 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;