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

MongoDB $ седмица

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

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

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

Пример

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

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

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

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

Резултат:

{ "birthWeek" : 52 } 

Виждаме, че седмицата е 52.

Тук използвах birthWeek като име на полето, което да се върне, но това може да е всичко (като weekBorn , week и т.н.).

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

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

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

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

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

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

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

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

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

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

Резултат:

{ "honolulu" : 52, "auckland" : 0 } 

В този случай датата се премества напред към следващата година/седмица, когато използвате Pacific/Auckland часова зона.

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

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

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

Резултат:

{ "utcOffset-1000" : 52, "utcOffset+1200" : 0 } 

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

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

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

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

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

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

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

Пример:

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

Резултат:

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

Виждаме, че документът е създаден на 3-та седмица от годината.

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

Седмица на ISO

Можете също да използвате $isoWeek оператор, за да върне номера на седмицата във формат ISO 8601, вариращ от 1 до 53 .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. E:Не може да се намери пакет mongodb-org

  2. Как да поправя моя mongodb?

  3. MongoDB използва клауза ИЛИ в mongoengine

  4. Въведение в типовете данни на MongoDB

  5. Намерете стойности, които не съдържат числа в SQL