在Node.js
应用中,我有一个名为user
的对象,其中包含以下内容:
{
name:'john',
family:'jackson'
}
我想像这样动态添加新对:
user["city"] = "new york";
但它不起作用!当我这样打印时:
console.log(user);
我看到与上面相同的内容:
{
name:'john',
family:'jackson'
}
但是当我打印出来时:
console.log(user.city);
打印出来:
new york
但为什么?我将此结果发送到浏览器并且它仍然没有city
键/值!
更新
在一个简单的javascript我解释的所有东西都有效。我的问题是当我使用节点js并使用Mongoose从数据库中获取一些数据之后:
Users.find({followings:{$elemMatch:{$in:[userID]}}}).exec(function(err, users){
users[0]["city"] = "new york"; // this doesn't work. this adds city to users but doesnt show in console.log(users[0])
});
但为什么呢? users是一个常规的Javascript对象。为什么我会这样做?
答案 0 :(得分:0)
我发现问题是什么。当我做一个mongoose查询时,结果不是一个普通的javascript对象。使用lean()我可以告诉Mongoose跳过创建常规的Mongoose模型。然后我改变了这个:
Users.find({followings:{$elemMatch:{$in:[userID]}}}).exec(function(err, users){
users[0]["city"] = "new york"; // this doesn't work. this adds city to users but doesnt show in console.log(users[0])
});
到此:
Users.find({followings:{$elemMatch:{$in:[userID]}}}).lean().exec(function(err, users){
users[0]["city"] = "new york"; //works now!
});
它有效!
答案 1 :(得分:-1)
试试这个:
var user = {'name':'John'};
user["city"] = "New York";
console.log(user);
您可以尝试这个简单的代码并查看节点的日志吗? 它应该吐出来:
Object {name: "John", city: "New York"}
<强>阐释:强>
在我们的示例中,我们设置一个具有属性name
且值为John
的对象
第二行只添加了一个额外的属性city
和一个New York
的值
第三行使用新属性