mongodb - Mongo Aggregation:计算具有和不具有值匹配的嵌套数组的不同帐户
问题描述
我有这样的文件:
{ account: 2, {payments: [{flag: false, amt: 100},{flag: false, amt: 100}]},
{ account: 3, {payments: [{flag: false, amt: 100},{flag: false, amt: 100}]},
{ account: 4, {payments: [{flag: true, amt: 50},{flag: false, amt: 100}]}
我想汇总和汇总 amt 并计算至少 1 个 true 的帐户
{"true": { "count":2, "sum_amt": 150}},
{"false": { "count": 2, "sum_amt": 0}}
*注意:我正在计算至少有 1 个真实的不同帐户与所有错误的帐户。
我努力了
[
{
$unwind: {
path: "$remits"
}
},
{
$project: {
"_id": 1,
account: true,
remits: {
flag: true
}
}
},
{
$group: {
_id: {
flag: "$payments.flag"
},
uniqueCount: {
$addToSet: "$account"
}
}
},
{
$project: {
"flag": 1,
cnt: {
$size: "$uniqueCount"
}
}
},
{}
]
但我认为我需要将一个字段投影到帐户级别,如果任何至少有 1 个 true 的帐户都有一个 true .. 我无法匹配,因为我需要计算没有 true 的那些。
解决方案
如果我理解正确,那么您正在寻找具有至少一个真正标志的过滤文档并进行一些分组。
假设您有以下示例文档:
{"_id":{"$oid":"5e9d17ca9db790488c44e8f6"},"account":"2","payments":[{"flag":true,"amt":{"$numberInt":"100"}},{"flag":false,"amt":{"$numberInt":"100"}}]}
{"_id":{"$oid":"5e9d1f6a9db790488c44e8f9"},"account":"3","payments":[{"flag":false,"amt":{"$numberInt":"100"}},{"flag":false,"amt":{"$numberInt":"100"}}]}
{"_id":{"$oid":"5e9d1f769db790488c44e8fa"},"account":"4","payments":[{"flag":true,"amt":{"$numberInt":"50"}},{"flag":false,"amt":{"$numberInt":"100"}}]}
我们使用以下管道查询:
[{$match: {
'payments.flag': true
}}, {$unwind: {
path: "$payments"
}}, {$group: {
_id:{$concat: [ "Account:",'$account','-',{$toString:'$payments.flag'}]},
count: {
$sum: 1
},
amount:
{$sum:'$payments.amt'}
}}]
输出如下:
_id:"Account:4-false"
count:1
amount:100
_id:"Account:2-false"
count:1
amount:100
推荐阅读
- javascript - 保留 html 视频元素的音高(preservesPitch、mozPreservesPitch、webkitPreservesPitch)
- python - 使用 BeautifulSoup4 进行网页抓取
- javascript - 在 Reactjs 中编写类组件方法时出现语法错误
- android - 如何在 nativescript 中实现父母门
- reactjs - React.js material-ui:用逗号屏蔽时是否可以对数量进行排序?
- javascript - Chrome 扩展 - 在 background.js 中需要什么
- ruby-on-rails - RSpec 404 测试响应状态为 200
- javascript - 根据多个属性过滤 N 级嵌套对象数组
- c++ - QMessage::question(),对话框应该是模态的,但有时不是,对话框显示在主窗口下
- node.js - 打字稿,路径别名与我的项目根目录之外的文件夹