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

MongoDB $ месец

В MongoDB, $month Операторът на конвейера за агрегиране връща месеца на дадена дата като число между 1 и 12 .

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

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

Пример

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

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

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

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

Резултат:

{ "birthMonth" : 12 }

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

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

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

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

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

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

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

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

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

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

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

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

Резултат:

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

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

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

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

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

Резултат:

{ "utcOffset-1000" : 12, "utcOffset+1200" : 1 }

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

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

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

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

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

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

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

Пример:

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

Резултат:

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

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

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Обобщаване на $lookup с C#

  2. 2 начина за изтриване на база данни в MongoDB

  3. Flask - Лоша заявка Браузърът (или прокси) изпрати заявка, която този сървър не може да разбере

  4. Mongoose разлика между .save() и използването на update()

  5. MongoDB:Изчислете времето на престой между всяка промяна на стойността на състоянието