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

MongoDB $dayOfMonth

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

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

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

Пример

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

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

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

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

Резултат:

{ "birthDayOfMonth" : 31 }

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

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

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

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

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

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

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

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

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

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

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

Резултат:

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

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

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

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

Резултат:

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

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

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

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

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

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

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

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

Пример:

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

Резултат:

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

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

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как мога да сортирам колекция Meteor по време на вмъкване?

  2. Разлики в MongoDB между NumberLong и просто Integer?

  3. Как да изравнявам поддокумент на основно ниво в MongoDB?

  4. как да заявявам дъщерни обекти в mongodb

  5. Сравнителен анализ на MongoDB – повишаване на производителността на NoSQL