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

时间:2015-10-14 11:21:47

标签: node.js mongodb mongoose

所以我知道这个问题已被多次询问,但我已经查了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用户名进行更新。

我不明白这里发生了什么,有人可以帮助我吗?

编辑:在下面的评论中,用户建议添加一个空回调。我做了什么,现在它按预期工作。我要感谢他(@ Sergio Tulentsev),我希望这个帖子将来会帮助别人。

1 个答案:

答案 0 :(得分:2)

正如update的文档中所述,如果您不想提供回调,则需要在返回的exec上调用Query来执行回复:< / p>

  

要在不等待MongoDB响应的情况下更新文档,请执行此操作   不传递回调,然后在返回的查询

上调用exec

因此,您可以exec拨打update电话或提供回电:

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

OR

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