我想知道是否有办法以小时为单位获取 MongoDB 文档的年龄?这是我目前所拥有的,但显然我使用的是日期对象,它不计算小时数,也不给出年龄,只给出创建日期,所以它没有给出预期的结果。事实上,$divide 管道甚至不允许日期对象。任何帮助表示赞赏。仅供引用,$views
变量是 NumberInt32 类型,$created_at
变量是时间戳,例如:2014-05-20T00:01:08.629 Z
.
db.projects.aggregate({
$project: {
"result": {
$divide: ['$views', '$created_at']
}
}
)
如果您想知道,这段代码是为了帮助对热门帖子进行排序,当然,这只是其中的一部分。感谢您的帮助!
最佳答案
假设 $views
和 $created_at
是文档中包含多个 View 和创建的时间戳的字段,如下所示:
{
"_id" : ObjectId("537abe5e8da9877dbb0ef604"),
"views" : 5,
"created_at" : ISODate("2014-05-20T00:00:00Z")
}
然后只需要一点点日期数学就可以得到与当前时间的差异:
db.projects.aggregate([
{ "$project": {
"score": { "$divide": [
{ "$divide": [
{ "$subtract": [
new Date(),
"$created_at"
]},
100*60*60
]},
"$views"
]},
"created_at": 1,
"views": 1
}}
])
因此,您基本上获得了与当前时间的小时差作为日期对象和 created_at
值。将其除以一天中小时数的标准数字,然后除以您的观看次数
,以获得用于排序的“分数”结果。
当您对两个 日期对象进行数学运算时,结果将以数字形式返回。因此,从那时起,仅使用数字的进一步操作将起作用。
关于javascript - MongoDB 以小时为单位获取文件年龄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23750012/