node.js - 在调用 .save 方法后对 Mongoose Document 使用扩展语法会导致未定义的键

标签 node.js mongodb express mongoose graphql

我正在使用 Mongoose/MongoDB,当我在调用 .save() 之后尝试使用扩展语法从文档返回值时,我得到了一些奇怪的行为。

// Npc is a Mongoose schema
const npc = new Npc({
        ...input,
        creator: userId
      });

const createdNpc = await npc.save();

我曾尝试使用 spread 运算符,但名称和描述键不存在。
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
}

它实际上看起来根本不像 Mongoose 文档。我会发布 {...createdNPC} 的结果显示差异,但这是一个巨大的代码片段,我不想让问题变得困惑。如果有帮助,我很乐意提供它!

我对 MongoDB 和 Mongoose 还是很陌生。为什么在 Mongoose 文档上使用传播语法会改变它的值?

我不认为这应该与问题相关,但以防万一我也会提到这是针对 graphql 解析器的。

最佳答案

这是因为 Mongoose 对其所有属性都使用了 getter。在您使用价差运算符之前,请调用 createdNpc.toObject()得到一个普通的对象。

关于node.js - 在调用 .save 方法后对 Mongoose Document 使用扩展语法会导致未定义的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58126454/

相关文章:

mongodb - 形成结构以使用复合键读取 bson 对象

python - 使用 PyMongo 从 JSON 返回随机结果

node.js - 无法找到安全性较低的应用程序设置

node.js - Mongoose 将架构属性更改应用于文档

mongodb - mongoengine-referencefield 存储什么

node.js - 在 Express 上伪造 req.host 值

node.js - Node.js + Express 中的表单上传(通过多方)

node.js - ExpressJS 动态生成页面 - 搜索引擎会根据查询参数创建列表吗?

node.js - 有条件地指向 package.json 中的主要字段

node.js - ORDER BY Sequelize nodeJS