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

MongoDB $година

В MongoDB, $year операторът на тръбопровода за агрегиране връща частта от годината на дадена дата.

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

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

Пример

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

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

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

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

Резултат:

{ "birthYear" : 2020 } 

Можем да видим, че годината 2020 се връща.

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

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

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

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

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

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

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

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

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

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

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

Резултат:

{ "honolulu" : 2020, "auckland" : 2021 } 

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

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

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

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

Резултат:

{ "utcOffset-1000" : 2020, "utcOffset+1200" : 2021 }

Върнете годината от ObjectId

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

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

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

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

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

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

Пример:

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

Резултат:

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

Можем да видим, че документът е създаден през 2021 г.

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

ISO година

Можете също да използвате $isoWeekYear оператор, за да върне годината с номериране на седмицата по ISO (т.е. номера на годината, използвайки формата на ISO 8601).


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Отпечатване на изхода на заявката на Mongo във файл, докато сте в mongo shell

  2. Защо получавам това отхвърлено предупреждение?! MongoDB

  3. Управление на продължителни операции в MongoDB

  4. MongoDB - Пуснете база данни

  5. Свързване с MongoDB през SSL с Node.js