在工作日期之间无法查询Mongo文档

时间:2019-04-11 11:16:34

标签: mongodb rest

我建立了一个传感器数据数据库,从本质上讲,该数据库存储Double值与Date时间戳配对。 我尝试用似乎正确的语法查询它们,但它只返回[]。

该API是在MongoDB Stitch中制作的,我通过Postman对其进行调用。 如果我让我的API返回所有文档,则可以正常工作。

这是我数据库中文档的示例:

_id:5caf026c8bc97c06677967d6
time:"2019-04-11T09:01:32Z"
val:102.85
topic:"pressure/stjernelaks/sensor0"
isotime:2019-04-11T09:01:32.000+00:00

编辑: 通过API以数组形式返回时,文档的外观如下:

    "_id": {
        "$oid": "5caf18078bc97c066779724a"
    },
    "time": "2019-04-11T10:33:43Z",
    "val": {
        "$numberDouble": "102.88"
    },
    "topic": "pressure/stjernelaks/sensor0",
    "isotime": {
        "$date": {
            "$numberLong": "1554978823000"
        }
    }
},

这是我正在查询的内容:

https://eu-west-1.aws.webhooks.mongodb-stitch.com/api/client/v2.0/app/semapres-charts-dsioa/service/get-chart-data/incoming_webhook/get-all-between?arg2=1554970464&arg1=1554980464

或者我使用了参数2019-04-11T07:01:32.000 + 00:00和2019-04-11T09:01:32.000 + 00:00。它与数据库中的格式完全相同。 它是由LocalDateTime用Java中的DateTimeFormatter.ISO_DATE_TIME创建的,而我的MongoDB表示数据字段类型为Date,而不是String。

这简直就是我的网钩:

 exports = function(payload) {
  const {arg1, arg2} = payload.query;
  const contentTypes = payload.headers["application/json"];
  const body = payload.body;

 const mongodb = context.services.get("mongodb-atlas");
 const mycollection = mongodb.db("pressure").collection("stjernelaks");
 return mycollection.find({
    isotime: {
        '$gte': new Date(arg1),
        '$lt': new Date(arg2)
    }
 }).toArray();
};

我不知道为什么它不返回任何文档,所以任何帮助都会很棒。

更新: 我尝试修改查询以返回范围内包含“ val”的文档。也有同样的问题。就像时间和日期字符串一样,我可以使用Webhook并对参数进行硬编码,并且它可以正常工作。而且我可以使我的webhook返回参数,它不会意外地将参数读回给我。但是当它根据我的参数进行查询时,它不会返回任何文档!太奇怪了!

1 个答案:

答案 0 :(得分:1)

使用$lte代替$lt

mycollection.find({
isotime: {
    '$gte': new Date("2019-04-11T07:01:32.000+00:00"),
    '$lte': new Date("2019-04-11T09:01:32.000+00:00")
}

})