mongodb - 如何根据MongoDB中的不同条件计算行数?
问题描述
我在 MongoDB 中有一个包含年龄列的集合,是否可以在一个查询中计算年龄列低于例如 10、介于 10 和 30 之间以及高于 30 的行数?即输出是这样的:
age cnt
<=10 607
10< and < 30 304
>=30 405
解决方案
(我发布的答案可能对某人有帮助!)正如 prasad_ 所说,您可以通过使用
db.getCollection("users").aggregate([
{
$project: {
item: 1,
lessThan10: {
$cond: [ { $lt: ["$dob.age", 10 ] }, 1, 0]
},
moreThan10lessThan30: {
$cond: [ { $and: [ { $gte: ["$dob.age", 10 ] }, { $lte: ["$dob.age", 30 ] } ] }, 1, 0]
},
morethan30:{
$cond: [{ $gt: ["$dob.age", 30]}, 1, 0]
}
}
},
{
$group: {
_id: "$item",
lessthan10: { $sum: "$lessThan10" },
between10and30: { $sum: "$moreThan10lessThan30" },
morethan30:{$sum:"$morethan30"}
}
}
])
推荐阅读
- java - 无法在 Firebase 存储中获取图像
- outlook - 通过 Rest Api 对 Outlook 进行租户级搜索
- reactjs - HTML2Canvas 不呈现 S3 图像
- java - 获取 java.lang.ClassCastException: java.lang.String 无法转换为 java.sql.Clob
- javascript - 使用 stroke-dasharray 在所需位置显示线条
- vue.js - 在 vue 中加载 DOM 后使微调器停止并渲染内容
- kubernetes - 如何使用 go-template 替换 kubectl 输出中的 JSON 值?
- .htaccess - 没有 php 扩展和漂亮的 url nginx 配置替代
- amazon-web-services - 将 csv 文件写入 S3 存储桶而不将其存储在本地
- pg-promise - pg-promise:将连接传递到不同库的推荐模式