首页 > 解决方案 > Mongo DB 按日期搜索事件

问题描述

因此,我的 MonogDB 中存储了一个大型数据集,每次在我的 iTunes 库中播放一首歌曲时,每个文档都包含艺术家姓名、歌曲名称和播放日期/时间。我目前可以使用以下查询来搜索数据库中歌曲出现次数最多的歌曲,这基本上是我播放它的总次数:

db.apple.aggregate([{ $sortByCount: "$song" }])

回报:

{ "_id" : "Fireflies (feat. Grieves)", "count" : 336 }
{ "_id" : "Cinderella (feat. Ty Dolla $ign)", "count" : 267 }
{ "_id" : "Check", "count" : 241 }
{ "_id" : "100 Grandkids", "count" : 240 }
{ "_id" : "Late For the Sky (feat. Slug & Aesop Rock)", "count" : 226 }

这将返回我在数据库中播放的 5 年歌曲中播放的歌曲总数。我希望能够做的是创建一个查询,它返回特定年份的歌曲播放总数。我有以下查询:

db.apple.find({"playTime" : {$regex : ".*2019*"}}).pretty()

这个返回了一年内播放的所有歌曲,但我不知道如何结合这两个查询。

标签: regexmongodbnosqlmongodb-query

解决方案


假设playTime是字符串数据类型 ( { "playTime" : "2017-06-17T06:04:40.230Z" }),使用 提取字符串的前 4 个字符$substrCP并转换为整数并与输入 year匹配。舞台将$sortByCount保持原样。转换为整数是可选的;如果不使用,输入年份应该是一个字符串。

例如(使用整数年份):

var INPUT_YEAR = 2017

db.test.aggregate( [
  { 
      $match: { 
          $expr: { 
              $eq: [ INPUT_YEAR,  { $toInt: { $substrCP: [ "$playTime", 0, 4 ] } }  ]  
          } 
      } 
  },
  { 
      $sortByCount:  "$song" 
  }
] )

推荐阅读