sql >> Database >  >> NoSQL >> MongoDB

MongoDB $dayOfWeek

In MongoDB is de $dayOfWeek aggregatiepijplijnbeheerder retourneert de dag van de week voor een datum als een getal tussen 1 (zondag) en 7 (zaterdag).

U kunt optioneel een tijdzone specificeren die voor het resultaat moet worden gebruikt.

De $dayOfWeek operator accepteert een datum (als een datum, een tijdstempel of een object-ID) of een document dat de te gebruiken datum en tijdzone specificeert.

Voorbeeld

Stel dat we een verzameling hebben met de naam pets met het volgende document:

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

We kunnen de volgende code uitvoeren om de dag van de week te extraheren uit de born veld in dat document.

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

Resultaat:

{ "birthDayOfWeek" : 5 }

Hier gebruikte ik birthDayOfWeek als de veldnaam die moet worden geretourneerd, maar dit kan van alles zijn (zoals dayOfWeek , day , enzovoort).

De _id veld wordt standaard geretourneerd bij het gebruik van projecties in MongoDB, maar in dit voorbeeld heb ik de _id expliciet verborgen veld met _id: 0 .

Geef een tijdzone op

U kunt een tijdzone specificeren die moet worden gebruikt voor de uitvoer van de $dayOfWeek telefoniste.

Wanneer u dit doet, wordt het argument doorgegeven aan $dayOfWeek moet de volgende vorm hebben:

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

Waar <dateExpression> is de te gebruiken datum, en <tzExpression> is de te gebruiken tijdzone.

De tijdzone kan worden opgegeven met behulp van de Olson-tijdzone-ID (bijv. "Europe/London" , "GMT" ) of de UTC-offset (bijv. "+02:30" , "-1030" ).

Olson tijdzone-ID

Hier is een voorbeeld waarbij de dag in twee verschillende tijdzones wordt weergegeven, elk met de Olson-tijdzone-ID's:

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

Resultaat:

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

UTC-offset

Hier is hetzelfde voorbeeld, behalve dat we deze keer de UTC-offset gebruiken.

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

Resultaat:

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

Retourneer de weekdag van een ObjectId

U kunt $dayOfWeek . gebruiken om het weekdaggedeelte van een ObjectId te retourneren.

ObjectId-waarden zijn hexadecimale waarden van 12 bytes die bestaan ​​uit:

  • Een tijdstempelwaarde van 4 byte, die de creatie van de ObjectId vertegenwoordigt, gemeten in seconden sinds het Unix-tijdperk.
  • Een 5 byte is een willekeurige waarde
  • Een oplopende teller van 3 bytes, geïnitialiseerd op een willekeurige waarde.

Samenvattend ziet ons document er als volgt uit:

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

Dit document bevat een ObjectId. We kunnen daarom $dayOfWeek . gebruiken om de dag van de week terug te geven waarop ons document is gemaakt (of meer specifiek, wanneer de _id de ObjectId-waarde van het veld is gemaakt).

Voorbeeld:

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

Resultaat:

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

We kunnen zien dat het document op de 3e dag van de week is gemaakt.

In dit geval heb ik ook de $toDate . gebruikt aggregatiepijplijnoperator om het tijdstempelgedeelte van de ObjectId te retourneren.


  1. mongodb versie 3.0.0 client robomongo mongovue

  2. MongoDB jsonSchema validatie additionalProperties

  3. installeer mongoDB (onderliggend proces mislukt, afgesloten met foutnummer 100)

  4. MongoDB - Beperk de resultaten van een zoekopdracht