我想知道是否有办法在几个小时内获得MongoDB文档的年龄?这是我到目前为止所拥有的,但显然我使用的是日期对象,它不是在计算时间,而是它没有给出年龄,只是它的创建日期,所以它没有给出理想的结果。实际上,$ divide管道甚至不允许使用日期对象。任何帮助表示赞赏。与FYI一样,$views
变量是NumberInt32类型,$created_at
变量是时间戳,例如:2014-05-20T00:01:08.629Z
。
db.projects.aggregate({
$project: {
"result": {
$divide: ['$views', '$created_at']
}
}
)
如果您想知道,此代码是为了帮助对热门帖子进行排序,但当然,它只是其中的一部分。谢谢你的帮助!
答案 0 :(得分:2)
假设$views
和$created_at
是文档中包含多个视图和创建的时间戳的字段,如下所示:
{
"_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
值。按标准数字将其除以一天中的小时数,然后除以views
,以获得排序的“得分”结果。
使用两个日期对象进行数学运算时,结果将作为数字返回。因此,仅使用数字的进一步操作将起作用。