更新MongoDB中的项

Update item in MongoDB

本文关键字:MongoDB 更新      更新时间:2023-09-26

为了使自己成为一个更好的开发人员和稳定我的血压,我正在学习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。

我请求蒙哥诸神来照亮我的无知,并告诉我应该如何运行更新命令。

我不确定你使用的是哪个db驱动程序,但它看起来像通过_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 . createfromexstring (req.params.id)而不是{_id: objectid . createfromexstring (req.params.id)}像update()一样。但我相信如果你在update()

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