将新属性添加到node.js中的现有json对象

Pra*_*ats 24 mongoose mongodb node.js

我有一个像这样的对象

==================records=========={ Id: 5114a3c21203e0d811000088,
  userId: 'test',
  sUserId: test,
  userName: 'test',
  url: 'test',
  Title: 'test'
}
Run Code Online (Sandbox Code Playgroud)

我需要在上面的记录中添加一个新字段名称:'test',我尝试给出records.Name = name,它不起作用.

请帮助

谢谢,普拉茨

dro*_*der 47

我假设您正在尝试向返回的Mongoose文档添加属性以在其他位置重用它.Mongoose返回的文档不是直接的JSON对象,您需要将它们转换为对象以向其添加属性.以下应该有效:

//... record is a mongoose Document
var r = record.toObject();
r.Name = 'test';
console.log("Record ",r);
Run Code Online (Sandbox Code Playgroud)


Hay*_*ire 11

那些发现这个问题的人,OP在原始问题下面的评论中提到这个问题的解决方案是:

records.set('Name', 'test')
Run Code Online (Sandbox Code Playgroud)

这会添加一个名为Namehaving value 的新属性test.

  • 如果使用{strict:true}定义的架构则不起作用 (2认同)

bom*_*ant 9

只是用,

var convertedJSON = JSON.parse(JSON.stringify(mongooseReturnedDocument);
Run Code Online (Sandbox Code Playgroud)

然后,

convertedJSON.newProperty = 'Hello!' 
Run Code Online (Sandbox Code Playgroud)

'你好!' 可以是任何东西,数字,对象或JSON Object Literal.

干杯! :)


maj*_*bot 5

我遇到了类似的问题,希望我数小时的生存挫折能帮助处于同样情况的其他人。我倾向于相信通过 Mongoose 返回的文档是只读的。这实际上不是真的。

但是,您不能将不在您的架构中的属性分配给您的文档。

因此,除非您的架构具有以下内容:

{
    Name: {String}
}
Run Code Online (Sandbox Code Playgroud)

尝试为您的文档指定 Name 时,您会经常感到沮丧。

现在,上面的答案中有一些解决方法也对我有用,但它们没有找到问题的根源:

myDocument.toObject();
JSON.parse(JSON.stringify(myDocument);
Run Code Online (Sandbox Code Playgroud)

这些会起作用,但在我看来,它们只是隐藏了问题。真正的问题是 Mongoose 比我们意识到的更聪明,并且正在执行您的架构,因为它应该。