#mongodb #mongodb-query
#mongodb #mongodb-запрос
Вопрос:
Я пытаюсь оценить совокупный запрос на основе условия даты, например, мне нужна переменная состояния, которая сообщает, открыта или закрыта система. Если дата, время истекли, статус закрыт, иначе он открыт.
Я пытаюсь получить текущую дату, которую я могу получить с помощью new Date(). Но как я могу преобразовать в определенный часовой пояс. Я нашел dateToString в более высоких версиях mongodb.
Но моя версия БД 3.2
db.getCollection('testCollection').aggregate([
{"$project":{
"_id":1,
"startDate":1,
"endDate":1,
"currentDate":new Date()
}}
])
Я могу получить дату, но не могу преобразовать ее в часовой пояс.
Есть ли что-то вроде
"currentDate":new Date("Asia/Kolkata")
Комментарии:
1. Не могли бы вы немного уточнить вопрос, чтобы было более понятно, как вы хотите запрашивать данные по сравнению как вы хотите ее отформатировать / просмотреть? В вашем сообщении кажется, что вы хотите запросить, но
$match
в вашем agg нет, только$project
.
Ответ №1:
Поскольку это более старая версия, вам нужно выполнить некоторые вычисления, чтобы преобразовать ее в вашу timezone
. Ниже приведен пример запроса агрегации, где 'x'
смещение между UTC
и вашим timezone
в часах.
db.getCollection('testCollection').aggregate([
{"$project":{
"_id":1,
"startDate":1,
"endDate":1,
"currentDate":new Date(),
"day": { "$dayOfMonth": {"$add": [ new Date(), x * 60 * 60 * 1000 ]}},
"month": { "$month": { "$add": [ new Date(), x * 60 * 60 * 1000 ]}},
"year": { "$year": { "$add": [ new Date(), x * 60 * 60 * 1000 ]}}
"hour": { "$hour": {"$add": [ new Date(), x * 60 * 60 * 1000 ]}},
"minute": { "$minute": { "$add": [ new Date(), x * 60 * 60 * 1000 ]}},
"second": { "$second": { "$add": [ new Date(), x * 60 * 60 * 1000 ]}}
}}
])
Комментарии:
1. У меня есть часовые пояса в этом формате только на данный момент, и это поле в таблице.. «Америка / Нью-Йорк» или «Азия / Калькутта»
Ответ №2:
Нет, это не так. MongoDB хранит, извлекает и запрашивает даты и времени строго в режиме «Z»: миллисекунды с эпохи GMT. Любая введенная вами дата будет интерпретироваться как дата Z независимо от того, как ваша локальная программа может ее интерпретировать.
Комментарии:
1. docs.mongodb.com/manual/reference/operator/aggregation /… возможно в mongo 4
2. Внимание: это
$dateToString
оператор. Это только функция исходящего форматирования. Вы не можете напрямую запрашивать его. Вы можете выполнить a$project
, а затем `$match’ для вывода строки, но это не может использовать преимущества индексов.