mongodb - Mongodb查询:在结果查询中生成“表格式”
问题描述
我收集了几天内每个 IP 和 MAC 的网络流量。该集合看起来像:
{
"_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 格式获取每天的“total_in_bytes”数量
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。像这样的东西(未经测试):
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("|"));
})
推荐阅读
- reactjs - 在 React Native 中垂直对齐组件
- html - 如何为两个 div 的一半提供背景颜色?
- c - devc++中,为什么只能输入数字,却不能求和?
- android - Android TV 中的谷歌助手和应用操作问题
- spring - 不要使用 RestTemplate 向服务发出相同的 http 请求,而是在不使用数据库的情况下将响应缓存在某处?
- flutter - 应该只有一项具有 [DropdownButton] 的值
- angular - Angular 应用程序在完全加载之前显示屏幕空白
- google-cloud-platform - 将 Google 托管的 ssl 证书与 dockerized uwsgi 应用程序一起使用
- css - 带有 flexbox 的 CSS 定位元素
- javascript - 我有这个错误-> Uncaught TypeError: _this.props.login is not a function