如何解决用$更新数组在mongodb本地nodejs中不起作用
|| 我的mongodb就像下面{ \"_id\" : ObjectId(\"4de20ef97065cc77c80541fd\"),\"todo\" : [
{
\"id\" : 1,\"desc\" : \"hi\",\"done\" : 0
},{
\"id\" : 2,\"desc\" : \"hello\",\"done\" : 0
}
],\"user\" : \"saturngod\" }
所以,我这样更新数据。
db.tasks.update({user:\'saturngod\',\'todo.id\':2},{\"$set\":{\"todo.$.done\":1}});
在mongodb cli中工作正常,但在node-mongodb-native驱动程序中无法工作。
我写了这样的代码
task_collection.update({user:username,\'todo.id\':taskId},{\"$set\":{\"todo.$.done\":1}},{safe:true},function(error,result){
sys.puts(\"callback user:\"+username+\"id:\"+taskId+\"error:\"+error);
if( error ) callback(error,result);
else callback(null,result)
});
错误返回null值,并且回调也有效。但是,数据库中的数据未更新。
更新:
我发现\'todo.id \':taskId找不到任何行。它在mongo cli中工作,但在mongodb-native node.js中不工作
完整资料来源:
https://github.com/saturngod/tatoo/blob/master/data-provider.js
解决方法
已修复,问题是taskId不是数字。
task_collection.update({user:username,\'todo.id\':Math.floor(taskId)},{\"$set\":{\"todo.$.done\":1}},{safe:true},function(error,result){
, 那是因为您有错别字。查看评论:
// Should be username,not user,based on the query that worked
task_collection.update({user:user,\'todo.id\':taskId},function(err,result){
sys.puts(\"callback user:\"+user+\"id:\"+taskId+\"error:\"+error);
// error is null because your callback argument name is err,not error
if( error ) callback(error,result);
else callback(null,result)
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。