我建立了一个传感器数据数据库,从本质上讲,该数据库存储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返回参数,它不会意外地将参数读回给我。但是当它根据我的参数进行查询时,它不会返回任何文档!太奇怪了!
答案 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")
}
})