在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比我们意识到的要聪明,并且正在执行你的模式。
如果你已经把这个对象加载到records
, records.Name = "test"
或records['Name'] = "test"
将会起作用。 您要么没有正确加载对象,要么插入一个未定义的值。
要testing:添加console.log(records.userId)
,这应该打印“testing”到terminal。
另外添加console.log(name)
。 如果你得到ReferenceError: name is not defined
,你显然不能这样做: records.Name = name