javascript - MongoDB 以小时为单位获取文件年龄

标签 javascript node.js mongodb

我想知道是否有办法以小时为单位获取 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/

相关文章:

Javascript 不适用于移动设备但适用于桌面

javascript - socket.io 发送消息两次

macos - npm install -g mongodb 没有在 OSX 10.8.4 上全局安装 mongodb?

mongodb - 如果对象在 mongodb 文档中具有相同的键,则将它们分组并推送到数组中

javascript - 检索用户的帖子?

eclipse - 如何使用Mongo为Birt编写表达式?

javascript - 如何在翻转时完成双 div 交换?

javascript - 在返回 ajax 值时隐藏按钮

Javascript获取点击的超链接的ID

javascript - 将文本数据保存到嵌套数组