在NodeJS中更新多个MongoDB文档似乎不起作用

所以我知道这个问题已经被问了很多次了,但是我已经查了30多分钟了,我真的找不到我做错了什么。

我想更新我的mongo数据

这里有两个文件的例子

{ "_id" : ObjectId("561e34c68b7639481c38ce62"), "id" : "1657999143", "timeTakenAt" : 1444820166833.0000000000000000, "userName" : "a", "__v" : 0 } { "_id" : ObjectId("561e34c68b7639481c38ce63"), "id" : "1659143", "timeTakenAt" : 1444820166833.0000000000000000, "userName" : "b", "__v" : 0 } 

我想更改为其他用户名。

例如JOHN CENA。

这是我正在使用的代码。

 ... var UserModel = mongoose.model('userSchema', userSchema); ... updateUsers() function updateUsers(){ UserModel.update({}, {$set: {userName: 'JOHN CENA'}}, {multi:true}) } 

但它不起作用,甚至没有一个文件被改变。 我也发现有人用过

 UserModel.update({}, {$set: {userName: 'JOHN CENA'}}, false,true) 

但是那个给了我一个错误,所以我猜这是来自旧版本的代码。

但是,如果我使用

 UserModel.update({}, {$set: {userName: 'JOHN CENA'}}, {multi:true}, updateUsers) 

(这自然会自然而然地循环)。 每一个文件最后都以JOHN CENA用户名进行更新。

我不明白这是怎么回事,有人能帮我吗?

编辑:在下面的评论用户build议添加一个空的callback。 我做了什么,现在它按预期工作。 我感谢他(@Sergio Tulentsev),我希望这个线程能在未来帮助其他人。

正如文档中提到的那样,如果你不想提供callback,你需要在返回的Query上调用exec来执行它:

要在不等待MongoDB响应的情况下更新文档,请不要传递callback,然后在返回的Query上调用exec

因此,要么对您的update链接exec调用,要么提供一个callback:

 function updateUsers(){ UserModel.update({}, {$set: {userName: 'JOHN CENA'}}, {multi:true}).exec(); } 

要么

 function updateUsers(){ UserModel.update({}, {$set: {userName: 'JOHN CENA'}}, {multi:true}, function(err, numAffected) {...}); }