为了让自己成为更好的开发者并破坏我的血压,我学习了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的众神揭露我的无知,并告诉我应该如何运行更新命令。
答案 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)},它们的行为是一样的