【问题标题】:Update single record in mongodb using express and node.js使用 express 和 node.js 更新 mongodb 中的单个记录
【发布时间】:2015-02-06 22:39:42
【问题描述】:

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

更新:我将 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 回复,但我的记录没有更新。我的语法有什么问题?

【问题讨论】:

  • res.send 将始终发送 200。因为它返回 '' 或状态码为 200 OK 的错误。如果你有错误,你应该做 res.status(500).send('Something broken!');

标签: javascript node.js mongodb express


【解决方案1】:

您需要确保将string _id 转换为ObjectId

另外,您使用的是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 原生驱动:new ObjectId(idString);
  • mongoJS: db.ObjectId(idString);
  • mongoSkin: toObjectID(idString);
  • 猫鼬:猫鼬.Types.ObjectId(idString);

【讨论】:

  • 我实施了这些更改,现在收到 500 错误。它与 db.ObjectId() 方法有关,但我不知道它是什么。
  • 我假设 db 是您的 mongoDB 驱动程序,所以它应该可以工作。 db.ObjectId() 可能不是为您的数据库驱动程序创建对象 ID 的方法。它适用于 mongojs,但如果您使用另一个 mongo 驱动程序,则 db.ObjectId() 可能无法正常工作。另外,收到的错误堆栈是什么?
  • 你可以试试 new ObjectID(idString);这是本机 mongoDB 使用的方法。猫鼬你用 mongoose.Types.ObjectId(string);
  • 我的数据库是“mongo.db(url)”数据库连接。节点应用程序的错误堆栈并没有说太多。 PUT /users/updateuser/54d3ba6cfe49c07c04733fac 500 42.412 毫秒
  • 我正在使用 mongoskin 仅供参考
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2021-03-05
    • 2015-05-28
    • 1970-01-01
    • 2022-07-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 2018-10-29
    相关资源
    最近更新 更多