在node.js中为现有的json对象添加一个新的属性

我有这样的对象

==================records=========={ Id: 5114a3c21203e0d811000088, userId: 'test', sUserId: test, userName: 'test', url: 'test', Title: 'test' } 

我需要添加一个新的字段名称:'testing'到上面的logging,我试图给logging。名称=名称,它没有工作。

请帮助

谢谢,Prats

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

 records.set('Name', 'test') 

这增加了一个名为有价值test的新属性。

我假设你正试图添加一个属性到一个返回的Mongoose文档重用它在别的地方。 由Mongoose返回的文档不是直接的JSON对象,你需要将它们转换为一个对象来为它们添加属性。 以下应该工作:

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

只要使用,

 var convertedJSON = JSON.parse(JSON.stringify(mongooseReturnedDocument); 

接着,

 convertedJSON.newProperty = 'Hello!' 

'你好!' 可以是任何东西,数字,对象或JSON对象文字。

干杯! 🙂

我也经历过类似的问题,并希望在相同的情况下,我的小时的生存挫折帮助别人。 我的意思是相信通过Mongoose返回的文档是只读的。 其实这不是事实。

但是,您无法将属性分配给不在您的模式中的文档。

所以,除非你的模式具有以下内容:

 { Name: {String} } 

试图将Name分配给您的文档,您将会经常感到沮丧。

现在,在上面的答案中也有解决方法,也适用于我,但他们没有find问题的根源:

 myDocument.toObject(); JSON.parse(JSON.stringify(myDocument); 

这些都行得通,但我认为他们只是隐藏了这个问题。 真正的问题是mongoose比我们意识到的要聪明,并且正在执行你的模式。

如果你已经把这个对象加载到recordsrecords.Name = "test"records['Name'] = "test"将会起作用。 您要么没有正确加载对象,要么插入一个未定义的值。

要testing:添加console.log(records.userId) ,这应该打印“testing”到terminal。

另外添加console.log(name) 。 如果你得到ReferenceError: name is not defined ,你显然不能这样做: records.Name = name