所以我知道这个问题已被多次询问,但我已经查了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),我希望这个帖子将来会帮助别人。
答案 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) {...});
}