Как получить текущую дату в определенном часовом поясе в Mongodb Aggregate 3.2

#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’ для вывода строки, но это не может использовать преимущества индексов.