Mongoose/MongoDB 获取一天内查看次数最多的文章
Posted
技术标签:
【中文标题】Mongoose/MongoDB 获取一天内查看次数最多的文章【英文标题】:Mongoose/MongoDB Get mostly viewed articles grouped within a day 【发布时间】:2020-05-10 15:07:27 【问题描述】:我正在尝试在 Node.js 上使用 MongoDB + Mongoose 克隆类似于 Reddit 的社区板 API。
我的示例 JSON 数据如下所示:
"genre": "free",
"viewCount": 90,
"isDeleted": false,
"commentCount": 0,
"voteCount": 0,
"_comments": [],
"_vote": [],
"_id": "ObjectId",
"title": "blahblah",
"contents": "blah",
"createdAt": "2020-01-24T08:50:28.409Z",
"__v": 0,
"id": "5e2aafd4395bf593aa94b623"
,
为了解决这个问题,我简单地使用.sort( viewCount:-1, createdAt: -1 )
排序。
但是,当我以这种方式排序时,最近创建的帖子将始终排在第一位,即使其他帖子的 viewCount
值更大...
我想到的下一个事情是尝试按每天对帖子数据进行分组(即今天创建的所有帖子都分组在一起;昨天创建的所有帖子都分组在一起)。
分组后,也许我可以按viewCount
对其余数据进行排序。
我相信使用aggregate
的方法将是一种可能的解决方案,但我想知道对于这个问题是否有最简单和最好的解决方案!
我想得到的输出是这样的:
// viewcount in Descending Order
'2020-01-24':
post1: viewcount: 999, contents: ...,
post2: viewcount: 998, contents:... ,
... ,
'2020-01-23':
post1: viewcount: 999, contents: ...,
post2: viewcount: 998, contents:... ,
... ,
'2020-01-22':
post1: viewcount: 999, contents: ...,
post2: viewcount: 998, contents:... ,
... , ...
请帮帮我...
谢谢你:)
【问题讨论】:
是的,使用聚合是一种方法(每天分组发布数据)。请参阅MongoDB docs 中的此示例。 所以如果我想按一天分组并保留原始数据,那么我应该使用 $$Root 吗?? 按天分组并获取 viewCount 的max
。你希望输出是什么样子的?
这将为您提供结果:(1)按天排序(asc)和查看次数(desc),以及(2)按天分组并获取第一个($first)文档($$ ROOT)为每个组。然后使用$project
塑造最终输出。
您可以编辑您的帖子并在其中包含输出
【参考方案1】:
此聚合给出的结果与您期望的输出相似:
db.test.aggregate( [
$sort: createdAt: -1, viewCount: -1 ,
$group: _id: "$createdAt", post: $push: "$$ROOT" ,
$project: post: 1, date: "$_id", _id: 0
] )
【讨论】:
以上是关于Mongoose/MongoDB 获取一天内查看次数最多的文章的主要内容,如果未能解决你的问题,请参考以下文章
SpaceX「十一手」火箭创纪录,一天内两次升空,马斯克:飞100次才退役