mongodb _id与graphql和document.toObject()

时间:2018-03-16 12:31:54

标签: javascript mongodb mongoose graphql graphql-js

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

const result = await db.myCollection.findById('xxxx')
return result;

这个给graphql的查询结果很好。

但现在,如果我返回result.toObject(),它就不再有用了。

我收到以下错误:

"message": "Cannot return null for non-nullable field MyCollection.id."

为什么使用toObject()_idid之间的映射无法完成?

1 个答案:

答案 0 :(得分:4)

MongoDB生成的id将是_id字段 - 它是actually mapping it for you的猫鼬。

  

Mongoose默认为每个模式分配一个id虚拟getter   它返回文件_id字段强制转换为字符串,或者在这种情况下   ObjectIds,其hexString。如果您不想添加id getter   您的架构,您可以禁用它在架构上传递此选项   施工时间。

这里的关键是id字段是虚拟吸气剂。为了包含生成的对象中的那些,您必须将适当的选项传递给toObject

result.toObject({ virtuals: true })

有关详细信息,请参阅docsthis answer