Как узнать количество пользователей за последний час в MongoDB? - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь получить количество клиентов за последний час, но когда я запускаю код, он возвращает пустой массив (я уже проверял, есть ли какие-то данные в updated за последний час).

Вот код.

const start = new Date();
start.setHours(0, 0, 0, 0); //milliseconds 00:00:00.000
const end = new Date();
end.setHours(23, 59, 59, 999); //milliseconds 23:59:59.999

const now = new Date().getTime();
const lastOneHr = new Date().getTime() - 60 * 60 * 1000;

//get chart info
router.post("/getcustomerchart/:adminId", (req, res, next) => {
  const adminId = req.params.adminId;
  Customer.aggregate([
    {
      $facet: {
        today: [
          {
            $match: {
              $and: [
                { adminId: adminId },
                { updated: { $gte: start, $lte: end } },
              ],
            },
          },
          { $count: "count" },
        ],
        lastHour: [
          {
            $match: {
              $and: [
                { adminId: adminId },
                { updated: { $gte: lastOneHr, $lte: now } },
              ],
            },
          },
          { $count: "count" },
        ],
        all: [{ $match: { adminId: adminId } }, { $count: "count" }],
      },
    },
  ])
    .then((docs) => {
      const response = {
        count: docs.length,
        customer_info: docs.map((doc) => {
          return {
            lastHour: doc.lastHour,
            today: doc.today,
            all: doc.all,
          };
        }),
      };
      res.status(200).json(response);
    })
    .catch((err) => {
      console.log(err);
      res.status(500).json({
        error: err,
      });
    });
});

Вот результат от Почтальона. Мне удалось подсчитать today и all, кроме lastHour. Что-то не так с форматом?

{
    "count": 1,
    "customer_info": [
        {
            "lastHour": [],
            "today": [
                {
                    "count": 1
                }
            ],
            "all": [
                {
                    "count": 10
                }
            ]
        }
    ]

1 Ответ

1 голос
/ 16 июня 2020

Вы должны преобразовать свое время в объект Date, MongoDB не может сравнить его с отметкой времени

Так что это будет работать

const now = new Date();
const lastOneHr = new Date(now.getTime() - 60 * 60 * 1000);

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