向Javascript对象动态添加新对

向Javascript对象动态添加新对,javascript,json,node.js,mongoose,Javascript,Json,Node.js,Mongoose,在Node.js应用程序中,我有一个名为user的对象,内容如下: { name:'john', family:'jackson' } 我想动态添加一个新的对,如下所示: user["city"] = "new york"; console.log(user); Users.find({followings:{$elemMatch:{$in:[userID]}}}).exec(function(err, users){ users[0]["city"] = "ne

Node.js
应用程序中,我有一个名为
user
的对象,内容如下:

{
   name:'john',
   family:'jackson'
}
我想动态添加一个新的对,如下所示:

user["city"] =  "new york";
console.log(user);
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])
});
但这不管用!当我这样打印时:

user["city"] =  "new york";
console.log(user);
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])
});
我看到的内容与上面相同:

{
   name:'john',
   family:'jackson'
}
但当我打印这个时:

console.log(user.city);
它打印这个:

new york
但是为什么呢??我将此结果发送到浏览器及其上,但仍然没有
city
key/value

更新:

在一个简单的javascript中,我解释的所有内容都是有效的。我的问题是当我使用node js时,在使用Mongoose从数据库中获取一些数据后,如下所示:

user["city"] =  "new york";
console.log(user);
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])
});
但是为什么呢?用户是一个常规的Javascript对象。为什么我会有这种行为?

试试这个:

var user = {'name':'John'};
user["city"] = "New York";
console.log(user);
您可以尝试一下这个简单的代码,看看哪些节点日志吗? 它应该说:

Object {name: "John", city: "New York"}
解释:

在我们的示例中,我们设置了一个属性为
name
且值为
John
第二行只是添加了一个额外的属性
city
和一个值
newyork

第三行用新属性记录对象

我发现问题出在哪里。当我执行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!
});

而且它有效

什么是
user
?它是一个引用该对象的变量吗?是的,它是在普通的旧javascript中工作的,至少在我的FF控制台中是这样。我对node.js了解不够,无法帮助您进一步了解。您能给我们看一下您的完整代码吗?很难说为什么你的问题会发生在这里。看起来它应该按照我的方式工作。@towerofnix:它的全部代码。我正在测试它。在节点端,我可以访问城市值,但当我将其发送到浏览器时,没有任何城市创建。现在我明白了!:):这和OP特别说的不起作用有什么不同吗?
lean()
是一个选项,但它会从结果对象中删除所有猫鼬。我个人认为你最好使用虚拟财产,但这完全取决于你的需要;例如,这对于将数据拖放到视图中是很好的。