mongodb _id 与 graphql 和 document.toObject()

pel*_*lea 4 javascript mongoose mongodb graphql graphql-js

让我们使用返回一项的基本 mongodb 查询:

const result = await db.myCollection.findById('xxxx')
return result;
Run Code Online (Sandbox Code Playgroud)

给 graphql 的这个查询结果工作正常。

但是现在,如果我返回 a result.toObject(),它将不再起作用。

我收到以下错误:

"message": "Cannot return null for non-nullable field MyCollection.id."
Run Code Online (Sandbox Code Playgroud)

为什么用toObject()之间的映射_idid不能做?

Dan*_*den 7

由 MongoDB 生成的 id 将是一个_id字段——实际上是 mongoose为您映射它

默认情况下,Mongoose 为您的每个模式分配一个 id 虚拟 getter,它将文档 _id 字段转换为字符串,或者在 ObjectIds 的情况下,返回其 hexString。如果您不希望将 id getter 添加到您的架构中,您可以在架构构建时禁用它传递此选项。

他们在这里的关键是该id领域是一个虚拟的吸气剂。为了将那些包含在生成的对象中,您必须将适当的选项传递给toObject

result.toObject({ virtuals: true })
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅文档此答案