让我们使用一个返回一个项目的基本mongodb查询:
const result = await db.myCollection.findById('xxxx')
return result;
这个给graphql的查询结果很好。
但现在,如果我返回result.toObject()
,它就不再有用了。
我收到以下错误:
"message": "Cannot return null for non-nullable field MyCollection.id."
为什么使用toObject()
,_id
和id
之间的映射无法完成?
答案 0 :(得分:4)
MongoDB生成的id将是_id
字段 - 它是actually mapping it for you的猫鼬。
Mongoose默认为每个模式分配一个id虚拟getter 它返回文件_id字段强制转换为字符串,或者在这种情况下 ObjectIds,其hexString。如果您不想添加id getter 您的架构,您可以禁用它在架构上传递此选项 施工时间。
这里的关键是id
字段是虚拟吸气剂。为了包含生成的对象中的那些,您必须将适当的选项传递给toObject
:
result.toObject({ virtuals: true })
有关详细信息,请参阅docs或this answer。