Javascript 为MongoDB集合中打开的事务总数创建聚合阶段
我在MongoDB聚合管道中使用的一个步骤如下所示:Javascript 为MongoDB集合中打开的事务总数创建聚合阶段,javascript,mongodb,aggregation-framework,Javascript,Mongodb,Aggregation Framework,我在MongoDB聚合管道中使用的一个步骤如下所示: { $group: { "_id": "$customer._id", "totalBalance": { "$sum": "$transactions.amounts.balance" } } } { $group: { "_id": "$customer._id", "totalOpenTransactions": { "$sum": [{ "$transact
{
$group: {
"_id": "$customer._id",
"totalBalance": {
"$sum": "$transactions.amounts.balance"
}
}
}
{
$group: {
"_id": "$customer._id",
"totalOpenTransactions": {
"$sum": [{ "$transactions.amounts.balance" : $gt: 0 }]
}
}
}
这是预期的工作。它汇总了事务处理.amounts.balance
的数值,并给出了总美元金额
除此之外,我想做的是确定在确定该数字时使用了多少笔交易(即,确定给定的客户id
有多少条记录,其中transactions.amount.balance>0
)
我试过这样做:
{
$group: {
"_id": "$customer._id",
"totalOpenTransactions": {
"$sum": { "$transactions.amounts.balance" : $gt: 0 }
}
}
}
上述方法不起作用。因此我还尝试使用数组,如下所示:
{
$group: {
"_id": "$customer._id",
"totalBalance": {
"$sum": "$transactions.amounts.balance"
}
}
}
{
$group: {
"_id": "$customer._id",
"totalOpenTransactions": {
"$sum": [{ "$transactions.amounts.balance" : $gt: 0 }]
}
}
}
也不起作用
$sum
可以这样使用吗?或者我需要以不同的方式处理此特定聚合阶段吗?您可以在$sum
中使用:
{
$group: {
"_id": "$customer._id",
"totalOpenTransactions": { $sum: { $cond: { if: { $gt: ["$transactions.amounts.balance", 0] }, then: 1, else: 0 } } }
}
}
您可以使用inside$sum
来执行此操作:
{
$group: {
"_id": "$customer._id",
"totalOpenTransactions": { $sum: { $cond: { if: { $gt: ["$transactions.amounts.balance", 0] }, then: 1, else: 0 } } }
}
}
非常感谢,@mickl。非常感谢,@mickl。