mongodb - Mongodb查询$agregate $group $count等好友
问题描述
我目前在我的 mongo 基地中有这种记录:
/* 1 */
{
"_id" : ObjectId("5bc746282c9bf51af0ff8afb"),
"horodate" : ISODate("2018-10-17T14:24:38.975Z"),
"id_track" : 835,
"type_cmd" : "F"
}
/* 2 */
{
"_id" : ObjectId("5bc746282c9bf51af0ff8afb"),
"horodate" : ISODate("2018-10-17T14:24:40.928Z"),
"id_track" : 853,
"type_cmd" : "R"
}
我正在寻找一个 mongo 请求的平均值,以获得对这个乱七八糟的请求的答案。
“type_cmd”可以是 A、R、P、C、F
昨天凌晨3点到今天凌晨3点这段时间,对于每个“id_track”,统计有多少条记录,统计每种“type_cmd”有多少个“type_cmd”。
要获得这样的结果:
id_track Nb_records Type A Type_R Type_P etc...
853 652 52 54 25 XX
842 52 6 7 15 XX
35 25 12 5 2 XX
非常感谢帮助我,这是我第一次使用这种数据库。
我目前正在学习如何从 mongoshell 发出请求,但它与 mysql 非常不同。
解决方案
我希望这能为您指明正确的方向。这是一个聚合,我相信它可以让你非常接近。您显然会用yesterday at 3am
and替换日期today at 3am
。
整个管道:
db.getCollection("test").aggregate(
// Pipeline
[
// Find documents between yesterday @ 3am and today @ 3am
{
$match: {
$and: [ { "horodate": { $gte: ISODate("2018-10-17T03:00:00.000+0000") } }, { "horodate": { $lte: ISODate("2018-10-18T03:00:00.000+0000") } } ] }
},
// Group documents by id_track and add type_cmd to array
{
$group: {
_id: '$id_track',
type_cmd: {$addToSet: "$type_cmd"}
}
},
// Deconstruct the type_cmd array
{
$unwind: "$type_cmd"
},
// group by type_cmd and count the number of documents
{
$group: {
_id: "$type_cmd",
type_cmd_count: { $sum:1}
}
},
]
);
以下是每个阶段的结果,希望有助于可视化正在发生的事情。
第 2 阶段 - 按 id_track 对文档进行分组
{
"_id" : 853.0,
"type_cmd" : [
"R"
]
}
{
"_id" : 835.0,
"type_cmd" : [
"F"
]
}
第 3 阶段 - 解构 type_cmd 数组
{
"_id" : 853.0,
"type_cmd" : "R"
}
{
"_id" : 835.0,
"type_cmd" : "F"
}
第 3 阶段 - 计数
{
"_id" : "F",
"type_cmd_count" : 1.0
}
{
"_id" : "R",
"type_cmd_count" : 1.0
}
推荐阅读
- awk - 基于常见匹配模式过滤行(用户未知)
- pandas - 正确读取 json 文件
- android - 如何处理 Kotlin 中 EditText drawableRight 图标的点击监听器?
- angular - 构建角度库时无法读取未定义的属性“模块”
- excel - 我需要使用索引和匹配从另一列条件匹配的列中提取数据
- html - 有没有办法在我的网站上显示图片,前提是图片不是列表中的空值?
- python-3.x - 命令提示符说“没有这样的文件或目录”但文件存在
- r - 如何根据 R 中的条件创建新变量
- javascript - 在javascript中对数据进行排序
- python - Django在来自另一个函数的表单中显示错误