动态地向Javascript对象添加新对

时间:2015-11-07 12:05:49

标签: javascript json node.js mongoose

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对象。为什么我会这样做?

2 个答案:

答案 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的值 第三行使用新属性

记录Object