我目前在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却有很大不同。
答案 0 :(得分:0)
我希望这可以为您指明正确的方向。我认为这是一个汇总,可以使您更加接近。您显然可以用yesterday at 3am
和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}
}
},
]
);
以下是每个阶段的结果,希望可以帮助可视化正在发生的事情。
{
"_id" : 853.0,
"type_cmd" : [
"R"
]
}
{
"_id" : 835.0,
"type_cmd" : [
"F"
]
}
{
"_id" : 853.0,
"type_cmd" : "R"
}
{
"_id" : 835.0,
"type_cmd" : "F"
}
{
"_id" : "F",
"type_cmd_count" : 1.0
}
{
"_id" : "R",
"type_cmd_count" : 1.0
}
答案 1 :(得分:0)
非常感谢您的帮助,但是结果是,只有一条记录,没有id_track的踪迹?
/* 1 */ {
"_id" : "A",
"type_cmd_count" : 92.0 }
/* 2 */ {
"_id" : "F",
"type_cmd_count" : 92.0 }
/* 3 */ {
"_id" : "R",
"type_cmd_count" : 91.0 }
/* 4 */ {
"_id" : "P",
"type_cmd_count" : 92.0 }
/* 5 */ {
"_id" : "C",
"type_cmd_count" : 92.0 }