Не получается получить документы из Монго между датами работы - PullRequest
1 голос
/ 11 апреля 2019

Я создал базу данных датчиков, которая по сути хранит значения Double в паре с метками времени Date. Я попытался запросить их с помощью правильного синтаксиса, но он возвращает только [].

API сделан в MongoDB Stitch, и я звоню через Почтальон. Если я заставлю свой 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

Edit: Вот как выглядит документ при возврате в виде массива через 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 с DateTimeFormatter.ISO_DATE_TIME в Java, и мой MongoDB говорит, что тип поля данных - Дата, а не Строка.

Это мой webhook во всей своей простоте:

 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 Ответ

1 голос
/ 11 апреля 2019

Используйте $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")
}

})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...