MongoDB-如何显示发生次数最多的时段?

MongoDB-如何显示发生次数最多的时段?,mongodb,date,mongodb-query,aggregation-framework,Mongodb,Date,Mongodb Query,Aggregation Framework,我是MongoDB的新手,因此在查找出现次数最多的时段时遇到了问题 我收集了不同国家和date\u start和date\u end的文档 “国家”:“奥地利”, “开始日期”:“2020-03-16”, “结束日期”:“2020-05-04” 我想找出大多数国家重叠的时间段(此集合详细说明了一个国家发生特定事件的时间段)。例如: 1 ------------------------------------------------ 2 3ooooooooooooooooo

我是MongoDB的新手,因此在查找出现次数最多的时段时遇到了问题

我收集了不同国家和
date\u start
date\u end
的文档

“国家”:“奥地利”,
“开始日期”:“2020-03-16”,
“结束日期”:“2020-05-04”
我想找出大多数国家重叠的时间段(此集合详细说明了一个国家发生特定事件的时间段)。例如:

1 ------------------------------------------------ 2



        3ooooooooooooooooooooooooo4
        


5~~~~~~~~~~~~~~~~~~~~~~~~6
我希望获得大多数国家重叠的时期,在本例中是3到6之间。

谢谢大家!

你的解释不太清楚。 这是一个国家的结果,大多数国家的日期范围重叠

使用内部联接进行聚合($lookup),通过从结果中投影($project)值来过滤($filter)主要国家/地区范围之间的日期:

上次聚合操作设置原始集合中的哪些字段是$project-ed

聚合示例

db.collection.aggregate([
  {
    "$lookup": {
      "from": "collection",
      pipeline: [],
      "as": "countries"
    }
  },
  {
    $project: {
      "country": 1,
      "date_start": 1,
      "date_end": 1,
      "in_date_range": {
        "$filter": {
          "input": "$countries",
          as: "item",
          cond: {
            "$and": [
              {
                "$ne": [
                  "$$item.country",
                  "$country"
                ]
              },
              {
                "$lt": [
                  "$$item.date_start",
                  "$date_end"
                ]
              },
              {
                "$gte": [
                  "$$item.date_end",
                  "$date_start"
                ]
              }
            ]
          }
        }
      }
    }
  },
  {
    $project: {
      "country": 1,
      "date_start": 1,
      "date_end": 1,
      "in_date_range": {
        "$map": {
          input: "$in_date_range.country",
          as: "country",
          in: "$$country"
        }
      }
    }
  }
])
Mongo游乐场示例:

有关聚合的更多信息: