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

标签 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 的值,它会产生所需的结果。如果有人可以帮助调试这段代码,那将非常有帮助!如果需要任何其他代码,请告诉我。谢谢!

最佳答案

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

在执行更新之前“检索”数据也是没有意义的,也不是好的做法。您已经有要匹配的“电子邮件”字段,因此只需直接执行即可:

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。

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

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

关于javascript - 无法使用 mongodb update() 函数编辑文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32387574/

相关文章:

javascript - if 语句同时返回 if 和 else if?

mongodb - 从 mongodb 中的嵌入文档中删除元素

mongodb - 在mongodb中调用ensureindex的优势仅仅是速度吗?

json - Mongoose:将 $in 运算符与 JSON 对象一起使用

javascript - 使用 react-spring 按顺序呈现帖子列表

javascript - ColdFusion.Window.create 回调处理程序问题

javascript - 使用 Mapbox GL JS 计算出现次数(geojson 属性)

javascript - 从另一个任务访问 Grunt 当前任务

mysql - 无法通过 Nodejs 连接到 MySQL

javascript - NodeJS : How do I perform an action after multiple asynchronous functions have completed?