更新MongoDB中的项目

时间:2014-07-17 23:13:08

标签: javascript node.js mongodb database

为了让自己成为更好的开发者并破坏我的血压,我学习了Node.js.有很多很棒的教程,非常感谢社区。我的GET,POST和DELETE相当不错,但是我在执行PUT请求方面遇到了问题,特别是Mongo处理更新数据的方式。我是noSQL的新手,这让我很困惑。这是我的控制器代码:

    router.put('/updateuser/:id', function(req, res){
        var db = req.db
        db.collection('userlist').updateById(req.params.id.toString(), {"username": req.body.username})
        console.log(req.params.id.toString())
    })

我在第3行尝试做的是通过URL中的项ID获取正确的项目,然后使用来自http正文的数据更新用户名。我已经取得了一些成功,但我不了解更新方法如何找到他们要更新的内容,每次运行代码时我都会得到500。

我呼吁Mongo的众神揭露我的无知,并告诉我应该如何运行更新命令。

1 个答案:

答案 0 :(得分:0)

我不确定您使用的是哪个数据库驱动程序,但它看起来像_id更新。要匹配_id,您需要将id字符串转换为ObjectID。请注意,您可能需要使用$ set来执行更新({$ set:{“username”:req.body.username}})。这是代码:

var ObjectID = require('mongodb').ObjectID;

router.put('/updateuser/:id', function(req, res){
    var db = req.db
    db.collection('userlist').update({_id: ObjectID.createFromHexString(req.params.id)}, 
            {$set: {"username": req.body.username}}, function(err, updated) {
       if (updated) {
          console.log('updated');
       }
       console.log(req.params.id);  // don't need to do toString(), it's string
    })
});

更新: 您正在使用udpateById(),我认为它需要ObjectID.createFromHexString(req.params.id)而不是{_id:ObjectID.createFromHexString(req.params.id)},就像update()那样。但我相信如果你在update()

中使用{_id:ObjectID.createFromHexString(req.params.id)},它们的行为是一样的