Json 聚合方法未获取更新的数据MongoDB
因此,当我发出删除请求时,我正在更新我的模型并删除所选的数组项。然后我通过ajax将更新后的JSON数据发送回来。我使用聚合方法来确定数组中所选值的总和,但问题是聚合方法基于删除列表项之前可用的数据返回数据,即使我将其放入回调中。那么我怎样才能得到正确的更新总数呢?以下是我正在使用的代码:Json 聚合方法未获取更新的数据MongoDB,json,node.js,mongodb,Json,Node.js,Mongodb,因此,当我发出删除请求时,我正在更新我的模型并删除所选的数组项。然后我通过ajax将更新后的JSON数据发送回来。我使用聚合方法来确定数组中所选值的总和,但问题是聚合方法基于删除列表项之前可用的数据返回数据,即使我将其放入回调中。那么我怎样才能得到正确的更新总数呢?以下是我正在使用的代码: regUser.findOneAndUpdate( { username:req.user.username }, { $pull: { budgets : { uniqueId: parse
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
});
});
异步编程:明白了。移动:
在regUser.aggregate回调函数中
function(err, aggData){
res.json({
sumData: aggData,
budgetList: data.budgets
});
});
有趣。那么,为什么将响应放在聚合回调函数中时它会起作用,而不是我使用的方式呢?这是事件循环在节点中的工作方式。当编译器读取这些函数时,它们不会被执行。它们已计划,也就是添加到事件循环列表中。一旦发生这种情况,节点编译器将传递一个消息,以查看下一个要执行的列表顶部的人。因为它是单线程事件循环,所以一次只执行一个。
function(err, aggData){
res.json({
sumData: aggData,
budgetList: data.budgets
});
});