你好,
我正在从findById
接收MongoDB对象,我想将该对象中的_id
从ObjectID
类型转换为string
。
我做错了事,但是我无法终生弄清楚这是什么!
我创建了以下函数:
student: async (parent, { _id }, context, info) => {
var student = await Student.findById(_id);
student._id = student._id.toString();
return student.toObject();
},
使用调试器,我可以看到所有值均符合预期,并且student._id.toString()
正在正确生成字符串。
但是,student对象中的值未设置为生成的字符串。
我尝试添加一个中间变量s
,以查看是否有区别,并且没有区别。
我在这里可能做错了什么? 我应该怎么做才能进一步调试?
感谢困惑的C ++开发人员!
答案 0 :(得分:0)
让我知道我是否在这里很远,但是由于_id周围的花括号,它似乎首先作为对象进入。 如果删除,您可能会得到所需的东西。
除此之外,您可以尝试
student._id = JSON.stringify(student._id);
考虑到它应该从您的MongoDB作为JSON返回
答案 1 :(得分:0)
为什么需要执行_id.toString()
?猫鼬document has id,它是_id
的字符串表示形式:
student: async (parent, { _id }, context, info) => {
var student = await Student.findById(_id);
return { id: student.id, ...student }
},
还toObject
accepts a transform function,您可以在架构上进行设置,如图所示,这样当调用_id
时,您可以使id
的行为类似于toObject
也请注意:
当您从mongoose
获得结果时,会将数据包装到model
对象中,并且实际文档位于_doc
属性下。因此,在执行student._id = student._id.toString()
时,您正在装饰model
对象,而不是该文档。这就是为什么变换功能更有意义的原因。否则,您必须装饰_doc
对象,这真的很难看。