【问题标题】:unable to edit document with mongodb update() function无法使用 mongodb update() 函数编辑文档
【发布时间】:2015-09-04 09:12:30
【问题描述】:

我正在尝试使用 update() 函数更新我的 mongodb 文档,但发现它什么也没做。

// Require mongo db user model
var User = require("./models/user.js");

app.post("/addfriend", function(req, res) {
    // get document by email       
    User.findOne({ email: req.body.email }, function (err, doc){

        var requester = req.user;
        var requested = doc;

        User.update(
            { _id: requested._id },
            { $push: { requests: requester._id } }
        )

        return res.redirect("/success");
    });
});

这是用户架构:

var userSchema = mongoose.Schema({
    firstname: String,
    lastname: String,
    email: String,
    password: String,

    friends: [mongoose.Schema.Types.ObjectId],

    requests: [mongoose.Schema.Types.ObjectId],

    activityLog: [mongoose.Schema.Types.Mixed],

    events: [mongoose.Schema.Types.Mixed]
});

如果我在控制台中记录requester._id 的值,它会产生所需的结果。如果有人可以帮助调试此代码,那将非常有帮助!让我知道是否需要任何其他代码。谢谢!

【问题讨论】:

    标签: javascript node.js mongodb mongoose mongodb-query


    【解决方案1】:

    您需要在回调中采取行动。当然,它应该实际上是在更新数据,但是您在操作实际完成之前就进入了重定向页面。此外,您的输入来源似乎不匹配。

    在执行更新之前“检索”数据也是没有意义的,也不是好的做法。你已经有了要匹配的“email”字段,所以直接做吧:

    app.post("/addfriend/:user", function(req, res) {
    
            console.log( "addfriend: %s", req.params.user );
    
            User.update(
                { email: req.body.email },
                { $push: { requests: req.params.user } },
                function(err,numAffected) {
                    if ( numAffected ) {  // 1 where matched or 0 if not
                       res.redirect("/success");
                    } else {
                       // handle not found or possibly error as well
                    }
                }                
            );
    
    });
    

    另请注意,您要添加的“用户”是从此处 URL 中的参数读取的,如果您实际发送的是 POST 正文,则可能需要将其调整为 POST 正文。但这将是一个通用的 REST 类型的请求格式。

    它在此处被“记录”,这是一种很好的做法,因此您可以看到您正在获得什么并且操作按预期工作。

    还可以考虑将其更改为 REST API。重定向到页面应该是与一般 API 操作相关的其他逻辑,它应该只返回 200 Ok 状态 404 Not found 或 500 Error (视情况而定)。

    要对此进行更多改进,还可以考虑在添加之前测试“朋友”是否不是联系人数组的一部分。一般来说这是个好主意:

            User.update(
                { email: req.body.email, requests: { $ne: req.params.user } },
                { $push: { requests: req.params.user } },
                function(err,numAffected) {
                   // handling here
                }
            )
    

    【讨论】:

      猜你喜欢
      • 2020-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 2019-08-31
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多