mongodb найти между заданным временем независимо от даты - PullRequest
0 голосов
/ 04 сентября 2018

Ниже запроса выдаст всех пользователей, которые вошли в систему от 1-AUG-2018, 6AM до 1-AUG-2018, 8AM . Есть ли способ найти пользователей, которые входят между скажем 6 утра до 8 утра , независимо от даты. Другими словами, все пользователи, которые входят в систему на любую дату, но время должно быть между 6AM-8AM.

db.user.find({
   "log-time" : {"$gte": ISODate("2018-08-1T00:06:00.000Z"), "$lt": ISODate("2018-08-05T08:00:00.000Z")}
})
 

1 Ответ

0 голосов
/ 04 сентября 2018

Вы можете использовать $ let , чтобы определить временную переменную, которая будет содержать hour, извлеченную из ISODate, используя $ hour , а затем вы можете применить свои условия в $match внутри $ выраж

db.user.aggregate([
    {
        $match: {
            $expr: {
                $let: {
                    vars: { hour: { $hour: "$log-time" } },
                    in: {
                        $and: [
                            { $gte: [ "$$hour", 6 ] },
                            { $lt: [ "$$hour", 8 ] }
                        ]
                    }
                }
            }
        }
    }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...