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

MongoDB $isoDayOfWeek

В MongoDB, $isoDayOfWeek Операторът на тръбопровода за агрегиране връща номера на деня от седмицата във формат ISO 8601, вариращ от 1 (за понеделник) до 7 (за неделя).

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

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

Пример

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

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

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

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

Резултат:

{ "birthIsoDayOfWeek" : 4 } 

В този случай получаваме резултат 4, който е различен от този, който получавам, когато използвам $dayOfWeek оператор срещу същия документ.

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

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

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

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

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

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

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

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

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

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

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

Резултат:

{ "honolulu" : 4, "auckland" : 5 }

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

Ето същия пример, освен че този път използваме UTC отместване.

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

Резултат:

{ "utcOffset-1000" : 4, "utcOffset+1200" : 5 }

Връщане на деня от седмицата от ObjectId

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

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

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

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

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

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

Пример:

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

Резултат:

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

Можем да видим, че документът е създаден на 2-ия ден от седмицата, когато се използва формат ISO 8601.

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Вмъкване на елемент във вложени масиви в MongoDB

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

  3. 10 въпроса, които да зададете (и да отговорите), когато хоствате MongoDB на AWS

  4. MongoDB $toLower

  5. MongoDB - как да потърся вложен елемент в колекция?