Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用express和node.js更新mongodb中的单个记录_Javascript_Node.js_Mongodb_Express - Fatal编程技术网

Javascript 使用express和node.js更新mongodb中的单个记录

Javascript 使用express和node.js更新mongodb中的单个记录,javascript,node.js,mongodb,express,Javascript,Node.js,Mongodb,Express,我想在mongoDB的集合中通过_id更新一条记录 更新:我将res改为req(谢谢!),并围绕我要传递的ObjectId实现了db.ObjectId(),现在我得到一个500内部服务器错误 "_id" : ObjectId("54d5296711436278137af74b"), "username" : "alex", "email" : "alex@gmail", "fullname" : "alex man", "age" : "15",

我想在mongoDB的集合中通过_id更新一条记录

更新:我将res改为req(谢谢!),并围绕我要传递的ObjectId实现了db.ObjectId(),现在我得到一个500内部服务器错误

    "_id" : ObjectId("54d5296711436278137af74b"),
    "username" : "alex",
    "email" : "alex@gmail",
    "fullname" : "alex man",
    "age" : "15",
    "location" : "minneap",
    "gender" : "mal"
这是来自客户端的ajax调用

    $.ajax({
                    type: 'PUT',
                    data: updatedUser,
                    url: '/users/updateuser/' + globalUserID,
                    dataType: 'JSON'
                }).done(function(response){
这是路由代码

/*
* PUT to updateuser
*/
router.put('/updateuser/:id', function(req, res) {
var db = req.db;
var userToUpdate = req.params.id;
db.collection('userlist').update(
{ _id: userToUpdate},
   req.body,
    function(err, result){
    res.send(
        (err === null) ? {msg: ''} : {msg: err}
    );
   });
});

我收到了200条回复,但我的记录没有更新。我的语法有什么问题?

应该是req.body,而不是res.body

db.collection('userlist').update(
{ _id: userToUpdate},
   res.body -> should be req.body

您需要确保将
字符串
\u id转换为
对象id

另外,您使用的是
res
.body,而不是
req
.body

router.put('/updateuser/:id', function(req, res) {
    var db = req.db;
    var userToUpdate = req.params.id;
    db.collection('userlist').update({ _id: ObjectId(userToUpdate)}, req.body, function (err, result) {
        res.send(
            (err === null) ? {msg: ''} : {msg: err}
        );
    });
});
不同的驱动程序使用不同的方法创建ObjectId:

  • mongoDB本机驱动程序:新的ObjectId(
    idString
  • mongoJS:db.ObjectId(
    idString
  • mongoSkin:toObjectID(
    idString
  • mongoose:mongoose.Types.ObjectId(
    idString

res.send将始终发送200。因为它返回“”或状态代码为200 OK的错误。如果您有错误,您应该执行res.status(500).send('Something break!');我实现了这些更改,现在得到一个500错误。它与db.ObjectId()方法有关,但我不知道它是什么。我假设db是您的mongoDB驱动程序,所以它应该可以工作。db.ObjectId()可能不是为数据库驱动程序创建对象id的方法。它适用于mongojs,但如果您使用的是另一个mongo驱动程序,db.ObjectId()可能无法工作。另外,收到的错误堆栈是什么?您可以尝试新的ObjectID(
idString
);这是本机mongoDB使用的方法。Mongoose您使用Mongoose.Types.ObjectId(
string
);MyDB是“mongo.db(url)”数据库连接。节点应用程序中的错误堆栈说明不了多少。PUT/users/updateuser/54d3ba6cfe49c07c04733fac 500 42.412 msI am使用mongoskin供参考