在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) {...}); }