为了账号安全,请及时绑定邮箱和手机立即绑定

MongoDB中15分钟时间间隔的分组结果

MongoDB中15分钟时间间隔的分组结果

尚方宝剑之说 2019-06-13 17:45:26
MongoDB中15分钟时间间隔的分组结果我有一个像这样的“身份”系列-{     _id: ObjectId("545a0b63b03dbcd1238b4567"),     status: 1004,     comment: "Rem dolor ipsam placeat omnis non. Aspernatur nobis qui nisi similique.",     created_at: ISODate("2014-11-05T11:34:59.804Z")},{     _id: ObjectId("545a0b66b03dbcd1238b4568"),     status: 1001,     comment: "Sint et eos vero ipsa voluptatem harum. Hic unde voluptatibus et blanditiis quod modi.",     created_at: ISODate("2014-11-05T11:35:02.814Z")}........我需要得到的结果分组15分钟间隔从收集。
查看完整描述

3 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

我喜欢这里的另一个答案,主要是使用日期数学,而不是聚合日期运算符,这虽然有帮助,但也可能有点模糊。

我想在这里补充的唯一件事是,您也可以返回一个Date通过这种方法从聚合框架中获取对象,而不是作为结果的“数值”时间戳。这只是在相同的原则上的一些额外的数学,使用$add:

db.collection.aggregate([
    { "$group": {
        "_id": {
            "$add": [
                { "$subtract": [
                    { "$subtract": [ "$current_date", new Date(0) ] },
                    { "$mod": [ 
                        { "$subtract": [ "$current_date", new Date(0) ] },
                        1000 * 60 * 15
                    ]}
                ] },
                new Date(0)
            ]
        },
        "count": { "$sum": 1 }
    }}])

这个Date(0)JavaScript中的结构以较短的形式表示相同的“划时代”日期,因为距EURCH的0毫秒就是时代。但要点是,当使用数字标识符对另一个bson日期对象进行“加法”时,所描述条件的逆值为真,并且最终结果实际上是Date.

所有驱动程序都将返回本机Date用这种方法键入他们的语言。


查看完整回答
反对 回复 2019-06-13
?
12345678_0001

TA贡献1802条经验 获得超5个赞

对于mongodb.version()<3.0来说,更漂亮一些

db.collection.aggregate([
    {$match: {created_at:{$exists:1}}},
    {$group: {
        _id: {$add:[
            {$dayOfYear: "$created_at" },
            {$multiply: [{$year: "$created_at"}, 1000]}
        ]},
        count: {$sum: 1 }
    }},
    {$sort:{_id:-1}}])


查看完整回答
反对 回复 2019-06-13
  • 3 回答
  • 0 关注
  • 1679 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信