MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB $dayOfWeek

W MongoDB $dayOfWeek operator potoku agregacji zwraca dzień tygodnia dla daty jako liczbę między 1 (niedziela) i 7 (sobota).

Opcjonalnie możesz określić strefę czasową, która będzie używana dla wyniku.

$dayOfWeek operator akceptuje datę (jako Date, Timestamp lub ObjectId) lub dokument określający datę i strefę czasową do użycia.

Przykład

Załóżmy, że mamy kolekcję o nazwie pets z następującym dokumentem:

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

Możemy uruchomić następujący kod, aby wyodrębnić dzień tygodnia z born pole w tym dokumencie.

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

Wynik:

{ "birthDayOfWeek" : 5 }

Tutaj użyłem birthDayOfWeek jako nazwę pola do zwrócenia, ale może to być cokolwiek (na przykład dayOfWeek , day itp.).

_id pole jest domyślnie zwracane podczas korzystania z projekcji w MongoDB, ale w tym przykładzie jawnie ukryłem _id pole przy użyciu _id: 0 .

Określ strefę czasową

Możesz określić strefę czasową, która będzie używana dla wyjścia $dayOfWeek operatora.

Kiedy to zrobisz, argument zostanie przekazany do $dayOfWeek musi mieć następującą formę:

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

Gdzie <dateExpression> to data do użycia, a <tzExpression> to strefa czasowa do użycia.

Strefę czasową można określić za pomocą identyfikatora strefy czasowej Olson (np. "Europe/London" , "GMT" ) lub przesunięcie UTC (np. "+02:30" , "-1030" ).

Identyfikator strefy czasowej Olsona

Oto przykład, który wyświetla dzień w dwóch różnych strefach czasowych, z których każda używa identyfikatorów stref czasowych Olson:

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

Wynik:

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

Przesunięcie UTC

Oto ten sam przykład, ale tym razem używamy przesunięcia UTC.

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

Wynik:

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

Zwróć dzień tygodnia z ObjectId

Możesz użyć $dayOfWeek aby zwrócić część dnia tygodnia z ObjectId.

Wartości ObjectId to 12-bajtowe wartości szesnastkowe, które składają się z:

  • 4-bajtowa wartość znacznika czasu, reprezentująca utworzenie ObjectId, mierzona w sekundach od epoki Uniksa.
  • 5 bajtów to wartość losowa
  • Licznik przyrostowy o 3 bajty, zainicjowany do wartości losowej.

Podsumowując, nasz dokument wygląda tak:

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

Ten dokument zawiera ObjectId. Możemy zatem użyć $dayOfWeek aby zwrócić dzień tygodnia, w którym nasz dokument został utworzony (a dokładniej, kiedy _id wartość ObjectId pola została utworzona).

Przykład:

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

Wynik:

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

Widzimy, że dokument powstał 3 dnia tygodnia.

W tym przypadku użyłem również $toDate operator potoku agregacji, aby zwrócić część znacznika czasu ObjectId.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Meteor używa funkcji pobierania lub znajdowania w funkcjach pomocniczych szablonu?

  2. Aplikacja Meteor — resetowanie bazy danych wdrożonej aplikacji

  3. Zapytanie Mongoose/mongoDB łączy się… ale pochodzę z tła sql

  4. Samouczek MongoDB dla początkujących (kompletny przewodnik) – Naucz się MongoDB w 15 minut

  5. Błąd Node.js:Nie można znaleźć modułu „mongoose”