如何在节点js中从mongodb获取特定月份的数据?

问题描述 投票:0回答:2

我有一个用例,需要查找特定月份的数据。如何获取给定月份的开始和结束日期?

这是示例代码。

{"_id":"5e00bc55c31ecc38d023b156","heat":20,"humidity":10,"deviceId":"a-1","template":"13435158964","entryDayTime":"2019-12-23T13:08:37.841Z"},
{"_id":"5e00bbd2c31ecc38d023b155","heat":20,"humidity":10,"deviceId":"a-1","template":"13435158964","entryDayTime":"2019-12-23T13:06:26.366Z"},
{"_id":"5df4a8fb46b9da1e2c0731df","heat":88,"humidity":80,"deviceId":"a-1","template":"13435158964","entryDayTime":"2019-12-14T09:18:51.892Z"},
{"_id":"5e00b50bc127260398cf51dd","heat":20,"humidity":10,"deviceId":"a-1","template":"13435158964","entryDayTime":"2019-12-23T12:37:31.127Z"},
{"_id":"5df20e44e7c51b4bd0095af3","heat":41,"humidity":26,"deviceId":"a-1","template":"13435158964","entryDayTime":"2019-12-12T09:54:12.375Z"}

这是我的不带moment.js的代码

有效负载:

{
    "deviceId":"a-1",
    "year":2019,
    "month":"December"
}
Collection.aggregate([
  {
    $match: {
              "deviceId": payload.deviceId,
              "entryDayTime": {
                                $lt: new Date(`${payload.month},${payload.year},2`).toISOString(),
                                $gte: new Date(`${payload.month},${payload.year},31`).toISOString()
                              }
            }
  }
])

这些是我在控制台中获得的时间范围(聚合函数中传递的时间),

2019-12-01T18:30:00.000Z

2019-12-30T18:30:00.000Z

带有moment.js的代码

有效负载:

{
    "deviceId":"a-1",
    "year":2019,
    "month":10
}

我也尝试过使用moment.js。但是我没有得到像数据库时间格式这样的时间。

Collection.aggregate([
  {
    $match: {
              "deviceId": payload.deviceId,
              "entryDayTime": {
                 $lt:moment([payload.year]).month(payload.month).startOf('month').tz('Asia/Kolkata').format(),
                 $gte:moment([payload.year]).month(payload.month).endOf('month').tz('Asia/Kolkata').format()
               }
            }
  }
])

以下是我在控制台中获得的时间戳。

2019-11-01T00:00:00+05:30
2019-11-30T23:59:59+05:30

如果首选moment.js,如何更改类似于示例代码的时间格式的时间格式?

javascript mongodb momentjs
2个回答
0
投票

只需尝试以下代码:

var dated="2019-11-01T00:00:00+05:30";
var newdated= new Date(dated);
var output= newdated.toISOString();
console.log(output);

结果:

'2019-10-31T18:30:00.000Z'

toISOString()方法返回简化的扩展名ISO format (ISO 8601)中的字符串,该字符串始终长24或27个字符(分别为YYYY-MM-DDTHH:mm:ss.sssZ±YYYYYY-MM-DDTHH:mm:ss.sssZ)。

时区始终为零UTC偏移,如后缀“ Z”所示。


0
投票

要查找特定月份的数据,请使用Date.UTCDate.UTC构造函数来创建范围:

Date

然后按如下方式使用它们:

Date

工作示例const payload = { "deviceId": "a-1", "year": 2019, "month": 11 // months start from 0 = January, so 11 = December } const from = new Date(Date.UTC(payload.year, payload.month, 1)).toISOString(); // "2019-12-01T00:00:00.000Z" const to = new Date(Date.UTC(payload.year, payload.month + 1, 1)).toISOString(); // "2020-01-01T00:00:00.000Z"

© www.soinside.com 2019 - 2024. All rights reserved.