【问题标题】:Aggregate Method Not Getting Updated Data MongoDB聚合方法未获取更新的数据 MongoDB
【发布时间】:2014-04-22 02:06:23
【问题描述】:

因此,当我发出 DELETE 请求时,我正在更新我的模型并删除选定的数组项。然后我通过 ajax 将更新的 JSON 数据发回。我正在使用聚合方法来确定数组中选定值的总和,但问题是聚合方法在删除列表项之前根据可用的数据返回数据,即使我将它放在回调中也是如此。那么我怎样才能得到正确的更新总和呢?这是我正在使用的代码:

regUser.findOneAndUpdate(
    { username:req.user.username },
    { $pull: { budgets : { uniqueId: parseFloat(req.param('id')) }} }, 
    function(err, data){
        if(err) return console.log(err);
        regUser.aggregate([
            { $match : { username : req.user.username } },
            // Unwind the array to de-normalize the items
            { "$unwind": "$budgets" },
                // Group the totals with conditions
            { "$group": {
                "_id": "$_id",
                "expense": { "$sum": { 
                    "$cond": [
                        "$budgets.expense",
                        "$budgets.value",
                        0
                    ]
            }},
                "nonExpense": { "$sum": { 
                    "$cond": [
                        "$budgets.expense",
                        0,
                        "$budgets.value"
                    ]
            }}
            }}], function(err, aggData){
                sumData = aggData
        });
        res.json({
            sumData: sumData,
            budgetList: data.budgets
        });
});

【问题讨论】:

    标签: json node.js mongodb


    【解决方案1】:

    异步编程陷阱:)。移动:

       res.json({
            sumData: sumData,
            budgetList: data.budgets
        });
    

    在 regUser.aggregate 回调函数中。

    function(err, aggData){
       res.json({
            sumData: aggData,
            budgetList: data.budgets
        });
    });
    

    【讨论】:

    • 有趣。那么为什么将响应放在聚合回调函数中时它会起作用,而不是我的方式呢?
    • 这是事件循环在 Node.js 中的工作方式。编译器读取函数时不会执行这些函数。它们是预定的,也就是添加到事件循环列表中。一旦发生这种情况,节点编译器就会通过查看列表顶部的下一个要执行的人。由于它是单线程事件循环,因此只能同时执行一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 2015-03-13
    • 2017-10-10
    • 1970-01-01
    • 2020-04-21
    • 2020-03-21
    相关资源
    最近更新 更多