【发布时间】:2023-03-24 15:40:01
【问题描述】:
我有一个 mongodb(Mongoose 实体),它代表我的应用程序中的财务条目:
var mongoose = require('mongoose');
var ObjectId = mongoose.Schema.Types.ObjectId;
var transactionSchema = mongoose.Schema({
description : String,
amount : { type:Number, min:0.01, required:true },
dateEntry : { type:Date, default:Date.now },
dateAdded : { type:Date, default:Date.now },
positive : { type:Boolean, default:false },
category : { type: ObjectId, ref: 'Category' },
user : { type: ObjectId, ref: 'User' }
});
module.exports = mongoose.model('Transaction', transactionSchema);
我想给出我的交易余额:我的第一种方法是先计算正数的总和,然后再计算负数的总和,最后从正数中减去负数:
async.parallel({
totalPositive: function(callback) {
var matcher = baseSearch;
matcher.positive = true;
Transaction.aggregate(
{ $match: matcher },
{ $group: {_id:null,sum:{$sum: '$amount'}} },
function(err,result) {
callback(err,result);
}
);
},
totalNegative: function(callback) {
var matcher = baseSearch;
matcher.positive = false;
Transaction.aggregate(
{ $match: matcher },
{ $group: {_id:null,sum:{$sum: '$amount'}} },
function(err,result) {
callback(err,result);
}
);
}
}, function(err, results) {
if (err) {
return res.json({error:err.message});
}
results.balance = results.totalPositive[0].sum - results.totalNegative[0].sum;
res.json(results);
});
我想知道是否可以通过只返回一个正负和来保存一个查询。
有什么想法吗?或者这是最好的解决方案? 谢谢
【问题讨论】:
标签: node.js mongodb mongoose mongodb-query aggregation-framework