0

我在 MongoDB 中有 ISOdate 格式的数据。当我在 mango shell 中运行查询时,它可以正常工作。

但是当我在 nodejs 中使用相同的查询时,它给出了一个错误

USED IN NODEJS
       router.get("/api/status/:id0/:id1",async(req,res)=>{
                ..........
                ..........   
            db.collection.aggregate([
                        {$match:
                          {"time": {
                            "$gt": req.params.id0,//req.params.id0.toISOString()
                            "$lt": req.params.id1}
                          }
                        },
                        {$group:
                           { 
                             _id: "$fb_id",
                             active:"$status"
                           }
                        }
                      ]);
 URL

  localhost:3011/status/"2019-12-15T09:19:57.216071"/"2019-12-16T09:25:03.508605"
  or 
  localhost:3011/status/2019-12-15T09:19:57.216071/2019-12-16T09:25:03.508605
  0r
  localhost:3011/status/%222019-12-15T09%3A19%3A57.216071%22%2F%222019-12-16T09%3A25%3A03.508605%22%0D%0A

仍然没有获取价值

4

2 回答 2

0

Nodejs (express) 将所有路由和查询参数解析为字符串。在您的情况下,这 2 个参数采用 ISODate 格式,但它们仍然是字符串。为了使您的聚合查询正常工作,您需要将它们作为Date/ISODate对象传递。

db.collection.aggregate([
  {
    $match: {
      "time": {
        "$gt": new Date(req.params.id0),
        "$lt": new Date(req.params.id1)
      }
    }
  },
...
])

您也可以查看此示例

于 2020-01-02T11:27:49.613 回答
-1

从您的示例 ISO 日期字符串无效。

例如: 在给定的日期时区缺少“Z” “2019-12-15T09:19:57.216071”

ISO 日期格式不正确

新日期(“2019-12-15T09:19:57.216071”)

2019 年 12 月 15 日星期日 09:19:57 GMT+0530(印度标准时间)

有效/正确的 ISO 日期格式

新日期(“2019-12-15T09:19:57.216071Z”)

2019 年 12 月 15 日星期日 14:49:57 GMT+0530(印度标准时间)

于 2020-01-02T11:43:59.733 回答