MongoDB-如何显示发生次数最多的时段?
我是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
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游乐场示例:
有关聚合的更多信息: