【发布时间】:2020-01-27 07:15:23
【问题描述】:
我使用的是 Mongoose/MongoDB,当我在调用 .save() 后尝试使用扩展语法从文档中返回值时,我遇到了一些奇怪的行为。
// Npc is a Mongoose schema
const npc = new Npc({
...input,
creator: userId
});
const createdNpc = await npc.save();
我尝试过使用 spad 运算符,但名称和描述键不存在。
return {
...createdNpc
creator: userFromId(npc.creator)
}
但是,当我直接访问这些值时,它们已被定义
return {
description: createdNpc.description,
name: createdNpc.name,
creator: userFromId(npc.creator)
};
我已确保描述和名称的拼写正确。我已经尝试记录{...createdNpc} 和{...createdNpc, description: createdNpc.description, name: createdNpc.name}。在日志中,我确认名称和描述都没有在 {...createdNpc}
我还尝试记录 createdNpc 和 {...createdNpc} 并确认它们返回不同的值。
这里创建了Npc:
{
_id: 5d8d5c7a04fc40483be74b3b,
name: 'NPC Name',
description: 'My Postman NPC',
creator: 5d8d50e0b5c8a6317541d067,
__v: 0
}
它实际上根本不像猫鼬文档。我会发布{...createdNPC} 的结果以显示差异,但这是一个巨大的代码 sn-p,我不想让问题变得混乱。如果有帮助,我很乐意提供!
我对 MongoDB 和 Mongoose 还是很陌生。为什么在 Mongoose Document 上使用扩展语法会改变它的值?
我认为这应该与问题无关,但以防万一我还会提到这是针对 graphql 解析器的。
【问题讨论】:
-
我敢打赌属性是在内部原型上,而不是在对象本身上,在这种情况下,传播不会复制它们 - 请通过
console.dir检查确定
标签: node.js mongodb express mongoose graphql