无法使用mongodb update()函数编辑文档

时间:2015-09-04 00:50:28

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

我正在尝试使用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的值,它会产生所需的结果。如果有人可以帮助调试此代码,那将非常有用!如果还需要其他代码,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:1)

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

这里也没有任何意义,并且在这里检索"执行更新之前的数据。你已经有了#34;电子邮件"要匹配的字段,所以直接执行:

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主体。但这将是一种通用的REST类型请求格式。

正在记录"在这里,这是一个很好的做法,所以你可以看到你得到的东西和行动按预期工作。

还要考虑将其更改为REST API。重定向到页面应该是与通用API操作相关的其他逻辑,它应该只返回200 Ok状态404 Not found或500 Error。

为了对此有所改进,还要考虑测试那个朋友"在添加之前,它不是contacts数组的一部分。一般来说,这是一个好主意:

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