【问题标题】:Mongodb aggregation over multiple collectionsMongodb聚合多个集合
【发布时间】:2021-09-10 14:08:47
【问题描述】:

由于文档数量众多,有人决定每天在我们的 Mongodb 中自动创建一个新集合,日期为后缀,格式为 XXXXX_YYYY_MM_DD。

我想将此数据库用作 Grafana 中的数据源(使用 JSON 数据源)。我发现合并多个集合的聚合查询,但问题是动态获取日期以使集合合并。

我可以从 Grafana 获得的唯一日期是 __from 和 __to 日期,因此我可以查找这些日期的集合,但不能查找 from 和 to 之间的整个日期范围。

知道如何执行吗?

【问题讨论】:

    标签: mongodb grafana


    【解决方案1】:

    你可以有一些可以在 mongo shell 中执行的 JS/shell 脚本来获取集合名称:

    var startDate= new Date("2021-09-01");
    var endDate = new Date("2021-09-09");
    
    var collections=[];
    var startTime = startDate.getTime(), endTime = endDate.getTime();
    //Then you could loop from one to another incrementing loopTime by 86400000 (1000*60*60*24) - number of milliseconds in one day:
    
    for(let loopTime = startTime; loopTime <= endTime; loopTime += 86400000)
    {
        var loopDay=new Date(loopTime)
        
        
     
        //generate collection for each day
        collections.push("COLLECTIONXXXX_"+loopDay.toISOString().slice(0, 10).replace(/-/g, '_'))
    }
    
    print(JSON.stringify(collections))
    

    输出:

    ["COLLECTIONXXXX_2021_09_01","COLLECTIONXXXX_2021_09_02","COLLECTIONXXXX_2021_09_03","COLLECTIONXXXX_2021_09_04","COLLECTIONXXXX_2021_09_05","COLLECTIONXXXX_2021_09_06","COLLECTIONXXXX_2021_09_07","COLLECTIONXXXX_2021_09_08","COLLECTIONXXXX_2021_09_09"]
    

    在上面的示例中,我们有开始日期(2021_09_01)和结束日期(2021_09_09),并且我们已经生成了所有集合名称并存储在数组中,现在您可以使用此集合数组中的集合名称并运行您的聚合联合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-06
      • 2020-02-16
      • 1970-01-01
      • 2014-05-27
      • 2013-06-17
      • 2017-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多