从mongodb阵列获取最近2天/分钟

时间:2018-08-05 01:04:33

标签: node.js mongodb

我有这样的mongodb数据:

"_id" : "sensor-2",
"data" : [ 
    {
        "sensor" : {
            "intensitas" : 3,
            "arus" : 0.1
        },
        "tanggal" : ISODate("2018-08-05T21:00:19.552+07:00")
    }, 
    {
        "sensor" : {
            "intensitas" : 8,
            "arus" : 0.1
        },
        "tanggal" : ISODate("2018-08-05T21:04:40.594+07:00")
    }, 
    {
        "sensor" : {
            "intensitas" : 6,
            "arus" : 0.1
        },
        "tanggal" : ISODate("2018-08-05T21:05:43.647+07:00")
    }, 
    {
        "sensor" : {
            "intensitas" : 13,
            "arus" : 0.1
        },
        "tanggal" : ISODate("2018-08-04T21:05:45.150+07:00")
    }, 
    {
        "sensor" : {
            "intensitas" : 15,
            "arus" : 0.05
        },
        "tanggal" : ISODate("2018-08-04T21:05:46.651+07:00")
    }, 
    {
        "sensor" : {
            "intensitas" : 13,
            "arus" : 0.05
        },
        "tanggal" : ISODate("2018-08-04T21:05:51.152+07:00")
    }, 
    {
        "sensor" : {
            "intensitas" : 8,
            "arus" : 0.05
        },
        "tanggal" : ISODate("2018-08-04T21:05:52.654+07:00")
    }, 
    {
        "sensor" : {
            "intensitas" : 11,
            "arus" : 0.05
        },
        "tanggal" : ISODate("2018-08-04T21:05:58.756+07:00")
    }, 
    {
        "sensor" : {
            "intensitas" : 3,
            "arus" : 0.05
        },
        "tanggal" : ISODate("2018-08-07T21:05:58.757+07:00")
    }
]

我想从数组的基数中获取id的最后2天或分钟,“ tanggal”是英语中的日期。

我尝试使用此how to filter last 10 days records from mongoDb?进行了尝试,但没有尝试我想要的,因为获取数据后,我想对过去2天/分钟的数据进行平均。

1 个答案:

答案 0 :(得分:0)

要获取最近2天的信息,您可以执行以下操作:

db.getCollection('items').aggregate([
  {
      $unwind: '$data'
  },
  {
    $match: {
      'data.tanggal': {
        $gt: (new Date(new ISODate()-2*1000*60*60*24))
      }
    }
  },
  {
    $sort: {
      'data.tanggal': -1
    }
  }
])

最近2分钟,您只需从日期计算中删除24,即可获得:

$gt: (new Date(new ISODate()-2*1000*60*60))