Mongodb查询:生成";表格格式";结果查询中

Mongodb查询:生成";表格格式";结果查询中,mongodb,mongodb-query,Mongodb,Mongodb Query,我收集了每个IP和MAC的网络流量,以天为单位。该集合看起来像: { "_id" : { "ip" : "190.112.100.0", "date" : "05/10/2020", "mac" : "bcd1657bca6e" }, "total_in_bytes"

我收集了每个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获取每天的“总字节数”

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("|"));
})