无法向从Mongoose返回的对象响应中添加新键

6

我有一个问题,但我不知道原因。在一个for循环中,我试图为来自mongoose查询的对象数组中的每个对象分配一个新的键值对。

    obj = {
      value1: "someValue",
      value2: [],
      value3: {}
      value4: {
        id: "someId"
      }
   }

如果我试图执行 obj.value4.newKey = "newValue",似乎并没有发生任何事情,但实际上当我执行这个操作时,它会在对象中创建一个新的属性并赋值为"newValue"。
console.log(obj.value4.newKey) // prints "newValue"

但是当我这样做时

console.log(obj) 

或者
console.log(obj.value4)

之前添加的新密钥似乎不存在


value3: {} 后面缺少逗号(,)。 - briosheje
你是否遇到了从mongoose查询返回的数据问题? - Neeraj Sewani
@neer17 是的,确实如此。 - Franco Aguilera
你能否将这些信息添加到你的问题中,以便我可以发布一个精确的答案来解决这个问题? - Neeraj Sewani
5个回答

8

我真的不知道为什么,但我找到了一种解决方法,这就是它生效的方式(继续使用第一个例子)。

res = JSON.parse(JSON.stringify(obj.value4));
res.newKey = "newValue";

现在我做的是:

console.log(res)

并且我收到了。
{
  id: "someId",
  newKey = "newValue"
}    

有什么想法吗?

1
我遇到了完全相同的问题。你的解决方案对我也起作用了。谢谢。 - FingerSmith

1
我认为这是因为mongoose返回了一个mongoose模型对象(请看截图):

mongoose object screenshot


0

你的代码完美运行(修复了缺少逗号的拼写错误)- 在此处尝试并打开控制台,你会看到value4中的newKey值按照你的期望被添加:

obj = {
    value1: "someValue",
    value2: [],
    value3: {},
    value4: {
        id: "someId"
    }
};

obj.value4.newKey = "newValue";
console.log(obj);

无论出了什么问题,都不是你发布的代码有问题,而是周围的代码有问题。你能否发布一个完整的、可执行的失败示例?


是的,一定是环境的问题。由于我的工作政策,我不能发布代码,但无论如何...可能是什么原因呢? - Franco Aguilera
@flaalf:没有一个失败的示例是无法确定的……对象每次循环都被重新创建了吗? - RichieHindle
不知道为什么,但这样做可以完成任务。 res = JSON.parse(JSON.stringify(obj.value4)); - Franco Aguilera

0

您的代码中存在错误:

obj = {
      value1: "someValue",
      value2: [],
      value3: {} // , is missing
      value4: {
        id: "someId"
      }
   }

而你期望的是对我来说可行的在实际操作中查看


抱歉,我在那里打错了一个字,但无论如何,这变得很奇怪。 如果我执行以下代码: code console.log(_.keys(obj))
code 它会打印对象中的所有键,并且我可以看到新添加的键存在。我不明白为什么会发生这种情况(可能与“原型”有关吗?)
- Franco Aguilera

0
由于mongoose返回mongoose模型对象,可以在mongoose函数的末尾使用.lean()函数,它将使mongoose模型对象变为普通的JavaScript对象。
希望这解决了问题 :)

你的回答可以通过提供更多的支持性信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的回答是否正确。你可以在帮助中心找到关于如何撰写好回答的更多信息。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接