【问题标题】:Update 1 field in MongoDB collection (AJAX, Node.js, Express)更新 MongoDB 集合中的 1 个字段(AJAX、Node.js、Express)
【发布时间】:2018-02-15 16:26:47
【问题描述】:

我正在尝试修复我的票务系统,但在尝试更新集合“票证”中的 1 个字段时不断遇到问题。基本上,如果 'closed' 变量等于 0,它是一张开放的票,如果它等于 1,它是一张封闭的票。由于某种原因,它不会正确写入数据库并在 AJAX 调用中给我一个错误。请让我知道如何解决此问题,非常感谢!

前端

$('.closetick').click(function () {
    id = $(this).val();
    var closed = '1';
    $.ajax({
        method: 'PUT',
        url: '/close-ticket/' + id,
        data: {
            closed: closed
        },
        success: function (data) {
            window
                .location
                .reload('/admin-dashboard');
        },
        error: function () {
            console.log('error');
        }
    })
});

后端

app.put('/close-ticket/:id', isLoggedIn2, function (req, res) {
    var id = new ObjectID(req.params.id);
    var query = {
        _id: id
    }
    var data = {
        closed: req.body.closed
    };
    mongodb.connect(url, function (err, db) {
        var collection = db.collection('tickets');
        if (err) {
            throw err;
        } else {
            var collection = db.collection("tickets");
            collection.findOneAndUpdate({
                _id: query
            }, {
                $set: {
                    closed: data
                }
            }, {
                upsert: true
            }, function (err, doc) {
                if (err) {
                    throw err;
                } else {
                    console.log("Updated");
                }
                db.close();
            });
        }
    });
});

【问题讨论】:

  • 尝试做一个 console.log(data) ;在 window.location.reload 之前
  • 试试{$set: {closed: data.closed}} 并检查
  • 我尝试添加 console.log(data) ;它说它没有定义。
  • 您在req.body 中获得数据了吗??检查一次

标签: node.js mongodb express


【解决方案1】:

您的方法存在多个问题,很明显您不了解JavaScript Objects 以及如何使用它们。鉴于您在req.body 中正确接收数据,以下将完成这项工作,

app.put('/close-ticket/:id', isLoggedIn2, function (req, res) {
    var id = new ObjectID(req.params.id);
    var query = {
        _id: id
    }
    var data = {
        closed: req.body.closed
    };
    mongodb.connect(url, function (err, db) {
        var collection = db.collection('tickets');
        if (err) {
            throw err;
        } else {
            var collection = db.collection("tickets");
            collection.findOneAndUpdate(query, { //issue 1 here
                $set: {
                    closed: data.closed //issue 2 here
                }
            }, {
                upsert: true
            }, function (err, doc) {
                if (err) {
                    res.sendStatus(400) // give a fail response
                    throw err;
                } else {
                    console.log("Updated");
                    res.sendStatus(200) // success response
                }
                db.close();
            });
        }
    });
});

【讨论】:

    猜你喜欢
    • 2013-08-20
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    相关资源
    最近更新 更多