聚合方法未获取更新数据MongoDB

时间:2014-04-21 16:47:28

标签: json node.js mongodb

所以当我发出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
        });
});

1 个答案:

答案 0 :(得分:1)

异步编程问题:)。移动:

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

在regUser.aggregate回调函数中。

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