mongodb - MongoDB如何计算子文档总数大于3且子文档值之和大于15000的地方
问题描述
样本数据:
{
"_id" : "5e7b0e1c4669fe48ea07b63a",
"isActive" : false,
"balance" : -1503.89,
"age" : 27,
"eyeColor" : "green",
"name" : "Allison Alvarez",
"gender" : "female",
"company" : "RONELON",
"email" : "allisonalvarez@ronelon.com",
"phone" : "+1 (963) 559-2276",
"address" : "583 Sumpter Street, Stewartville, West Virginia, 110",
"registered" : "2016-10-19T11:45:39 -01:00",
"outstandingloans" : [
{
"id" : 0,
"balance" : -710.65
},
{
"id" : 1,
"balance" : -2979.51
},
{
"id" : 2,
"balance" : -2520.79
},
{
"id" : 3,
"balance" : -3488.78
}
]
}
我正在尝试查找拥有超过 3 笔未偿贷款且余额总和小于 -15000 的男性人数。
到目前为止我的工作是:
db.defaulters.aggregate([
{$match: { "gender" : "male"}},
{$project: {_id: "$name", loansGrt3: {$gte: [{$size: '$outstandingloans'}, 3]} }}
]);
和
db.defaulters.find(
{ $where: "this.outstandingloans.length > 3"}
).count();
解决方案
db.defaulters.aggregate([
{ $unwind: "$outstandingloans" },
{ $project:
{ _id:1,
size_of_outstandingloans: { $size: "$outstandingloans"},
totalBalance: { $sum: "$outstandingloans.amount" }
}
},
{ $match: { $and: [ {"size_of_outstandingloans": {$gt: 3} }, {"totalBalance": {$lt: -15000} }] }}
])
推荐阅读
- reactjs - 为什么 React 不重定向到路由?
- html - Bootstrap 网格列表视图等宽
- nestjs - Visual Studio Code:在非调试模式下开始在断点处停止并抱怨
- ruby - 查询返回不正确结果的 Mongoid ruby
- angular - 获取 Angular 中所有任务的列表
- java - 第三面板没有出现
- php - Symfony 5 不会加载 CSS 文件
- javascript - 引用类的方法和 `this` 的行为
- angular - 如何使用 *ngIf 隐藏所有 mat-checkboxes/mat-radio-buttons
- angular - 我在 Angular 变更检测中的断点未在 checkAndUpdateView() 上触发