Mongodb查询:生成";表格格式";结果查询中
我收集了每个IP和MAC的网络流量,以天为单位。该集合看起来像:Mongodb查询:生成";表格格式";结果查询中,mongodb,mongodb-query,Mongodb,Mongodb Query,我收集了每个IP和MAC的网络流量,以天为单位。该集合看起来像: { "_id" : { "ip" : "190.112.100.0", "date" : "05/10/2020", "mac" : "bcd1657bca6e" }, "total_in_bytes"
{
"_id" : {
"ip" : "190.112.100.0",
"date" : "05/10/2020",
"mac" : "bcd1657bca6e"
},
"total_in_bytes" : 237203,
},
{
"_id" : {
"ip" : "191.110.90.0",
"date" : "05/10/2020",
"mac" : "bcd165bc8ae5"
},
"total_in_bytes" : 197102,
},
{
"_id" : {
"ip" : "190.112.100.0",
"date" : "06/10/2020",
"mac" : "bcd1657bca6e"
},
"total_in_bytes" : 205210,
},
{
"_id" : {
"ip" : "190.112.100.0",
"date" : "07/10/2020",
"mac" : "bcd1657bca6e"
},
"total_in_bytes" : 223245,
},
{
"_id" : {
"ip" : "191.110.90.0",
"date" : "07/10/2020",
"mac" : "bcd165bc8ae5"
},
"total_in_bytes" : 208200,
}
现在,我需要以表格格式或等效CSV获取每天的“总字节数”
ip | mac | 05/10/2020 | 06/10/2020 | 07/10/2020
----------------------------------------------------------------------------------------
190.112.100.0 bcd1657bca6e 237203 205210 223245
191.110.90.0 bcd165bc8ae5 197102 ----- 208200
你必须做一些JavaScript。类似于此(未经测试):
谢谢你,我们是多姆谢特。部分原因是,如果某个IP地址在某个特定日期不包含网络流量,那么就不要打印一个空格或指示空白数据的字符。是的,我知道,但我想你已经知道代码的样子了。
var header = ["ip", "mac"];
var dates = db.collection.aggregate([
{$group: {_id: null, date_set: {$addToSet: "$_id.date"}}}
]).toArray().shift().date_set;
header.push(dates);
print(header.join("|"));
db.collection.aggregate([
{
$group: {
_id: { ip: "$_id.ip", mac: "$_id.mac" },
data: {
$push: {
total_in_bytes: "$total_in_bytes",
date: "$_id.date"
}
}
}
}
]).forEach(function(doc) {
var row = [doc._id.ip, doc._id.mac];
dates.forEach(function(d) {
doc.data.forEach(function(val) {
if (val.date == d)
row.push(val.total_in_bytes);
});
});
print(row .join("|"));
})