regex - 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()
这个返回了一年内播放的所有歌曲,但我不知道如何结合这两个查询。
解决方案
假设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"
}
] )
推荐阅读
- sql - 计算支付日期
- c - 将位转换为人类可读的格式
- ruby - `block_given?` 是否呈现 `&block` 参数可选?
- ruby-on-rails - 无法解决对 ROR 的依赖问题
- python - Python Pip Install Wheel 将文件放在哪里
- ios - 如何使整个 UIView 淡入白色并返回?
- c# - microsoft.office.interop.powerpoint v16 (Office 365) 与 C#
- javascript - 如何为多个移动屏幕高度(Angular 6)设置垫卡高度?
- python - 如何进行numpy数组颜色相似度转换
- aiml - 在目标中,让聊天机器人对我退出的时间有反应