MongoDB以小时为单位获取文档年龄

时间:2014-05-20 02:19:50

标签: javascript node.js mongodb

我想知道是否有办法在几个小时内获得MongoDB文档的年龄?这是我到目前为止所拥有的,但显然我使用的是日期对象,它不是在计算时间,而是它没有给出年龄,只是它的创建日期,所以它没有给出理想的结果。实际上,$ divide管道甚至不允许使用日期对象。任何帮助表示赞赏。与FYI一样,$views变量是NumberInt32类型,$created_at变量是时间戳,例如:2014-05-20T00:01:08.629Z

db.projects.aggregate({ 
    $project: { 
        "result": {
            $divide: ['$views', '$created_at']
        }
    }
)

如果您想知道,此代码是为了帮助对热门帖子进行排序,但当然,它只是其中的一部分。谢谢你的帮助!

1 个答案:

答案 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,以获得排序的“得分”结果。

使用两个日期对象进行数学运算时,结果将作为数字返回。因此,仅使用数字的进一步操作将起作用。