Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用';通用';mongoose模式的虚拟_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 使用';通用';mongoose模式的虚拟

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

我想将_id变量转换为id

因此,我想将虚拟“id”字段添加到我要创建的所有模式中,每当我访问模型的“id”字段时,该字段将返回“\u id”的值

从文件中 我发现,首先我必须创建模式,然后分别应用虚拟“id”字段

我想简单地将虚拟字段添加到基本
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作为字符串
  • 但是,默认情况下,
    .toJSON
    不包含虚拟对象,因此当您将mongoose文档发送到浏览器中的主干时,它只会得到“\u id”,而不是“id”
  • 要快速获得包含虚拟对象的JSON表示,请使用
    mymodelcinstance.toJSON({virtuals:true})
    。您将同时获得“\u 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;