MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB $час

В MongoDB, $hour Операторът на тръбопровода за агрегиране връща часовата част от датата като число между 0 и 23 .

По избор можете да посочите часова зона, която да използвате за резултата.

$hour операторът приема или дата (като дата, клеймо за време или ObjectId), или документ, който посочва датата и часовата зона за използване.

Пример

Да предположим, че имаме колекция, наречена pets със следния документ:

{
	"_id" : ObjectId("600631c7c8eb4369cf6ad9c8"),
	"name" : "Fetch",
	"born" : ISODate("2020-12-31T23:30:15.123Z")
}

Можем да изпълним следния код, за да извлечем часовата част от born поле в този документ.

db.pets.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          birthHour: { $hour: "$born" }
        }
    }
  ]
)

Резултат:

{ "birthHour" : 23 }  

Тук използвах birthHour като име на полето, което трябва да се върне, но това може да е всичко (като hourOfBirth , hour и т.н.).

_id полето се връща по подразбиране при използване на проекции в MongoDB, но в този пример изрично скрих _id поле с помощта на _id: 0 .

Посочете часова зона

Можете да посочите часова зона, която да използвате за изхода на $hour оператор.

Когато направите това, аргументът се предава на $hour трябва да бъде в следната форма:

{ date: <dateExpression>, timezone: <tzExpression> }

Където <dateExpression> е датата за използване и <tzExpression> е часовата зона за използване.

Часовата зона може да бъде определена с помощта на идентификатора на часовата зона на Олсън (напр. "Europe/London" , "GMT" ) или отместването на UTC (напр. "+02:30"). , "-1030" ).

Идентификатор на часовата зона на Олсън

Ето пример, който извежда часа в две различни часови зони, всяка от които използва идентификаторите на часовата зона на Olson:

db.pets.aggregate(
  [
    {
      $project: {
          _id: 0,
          honolulu: { 
            $hour: { date: "$born", timezone: "Pacific/Honolulu" }
            },
          auckland: { 
            $hour: { date: "$born", timezone: "Pacific/Auckland" }
            }
        }
    }
  ]
)

Резултат:

{ "honolulu" : 13, "auckland" : 12 } 

Изместване на UTC

В този пример използваме UTC отместване.

db.pets.aggregate(
  [
    {
      $project: {
          _id: 0,
          "utcOffset-1000": { 
            $hour: { date: "$born", timezone: "-1000" }
            },
          "utcOffset+1200": { 
            $hour: { date: "$born", timezone: "+1200" }
            }
        }
    }
  ]
)

Резултат:

{ "utcOffset-1000" : 13, "utcOffset+1200" : 11 } 

Върнете часа от ObjectId

Можете да използвате $hour за да върнете часовата част от ObjectId.

Стойностите на ObjectId са 12 байтови шестнадесетични стойности, които се състоят от:

  • 4 байтова стойност на времеви печат, представляваща създаването на ObjectId, измерена в секунди след епохата на Unix.
  • 5 байта е произволна стойност
  • Брояч с нарастващ 3 байта, инициализиран на произволна стойност.

За да обобщим, нашият документ изглежда така:

{
	"_id" : ObjectId("600631c7c8eb4369cf6ad9c8"),
	"name" : "Fetch",
	"born" : ISODate("2020-12-31T23:30:15.123Z")
}

Този документ съдържа ObjectId. Следователно можем да използваме $hour за да върне часа от деня, в който е създаден нашия документ (или по-точно, когато _id стойността ObjectId на полето е създадена).

Пример:

db.pets.aggregate(
  [
    {
      $project:
        {
          "timeStamp": { $toDate: "$_id"},
          "hour": { $hour: "$_id" }
        }
    }
  ]
).pretty()

Резултат:

{
	"_id" : ObjectId("600631c7c8eb4369cf6ad9c8"),
	"timeStamp" : ISODate("2021-01-19T01:11:35Z"),
	"hour" : 1
}

Виждаме, че документът е създаден в 1-вия час на деня.

В този случай използвах и $toDate оператор на тръбопровода за агрегиране, за да върне частта от клеймото за време на ObjectId.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как най-добре да създадете RESTful API в Node.js

  2. Как мога да комбинирам няколко колекции в една колекция, използвайки $lookup mongodb или nodejs mongodb?

  3. Проверка на здравето на Mongodb стъпка по стъпка

  4. Премахнете дубликатите, когато използвате $unionWith в MongoDB

  5. MongoDB 4.2 Управление и наблюдение без блокиране на доставчик