sql >> Database >  >> NoSQL >> MongoDB

MongoDB $ minuut

In MongoDB is de $minute aggregatiepijplijnoperator retourneert het minuutgedeelte van een datum als een getal tussen 0 en 59 .

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

De $minute 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 het minuutgedeelte te extraheren uit de born veld in dat document.

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

Resultaat:

{ "birthMinute" : 30 } 

Hier gebruikte ik birthMinute als de veldnaam die moet worden geretourneerd, maar dit kan van alles zijn (zoals minutesAtBirth , minutes , 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 $minute telefoniste.

Wanneer u dit doet, wordt het argument doorgegeven aan $minute 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 minuut in twee verschillende tijdzones wordt weergegeven, elk met de Olson-tijdzone-ID's:

db.pets.aggregate(
  [
    {
      $project: {
          _id: 0,
          kabul: { 
            $minute: { date: "$born", timezone: "Asia/Kabul" }
            },
          katmandu: { 
            $minute: { date: "$born", timezone: "Asia/Katmandu" }
            }
        }
    }
  ]
)

Resultaat:

{ "kabul" : 0, "katmandu" : 15 } 

UTC-offset

In dit voorbeeld gebruiken we de UTC-offset.

db.pets.aggregate(
  [
    {
      $project: {
          _id: 0,
          "utcOffset+04:30": { 
            $minute: { date: "$born", timezone: "+04:30" }
            },
          "utcOffset+05:45": { 
            $minute: { date: "$born", timezone: "+05:45" }
            }
        }
    }
  ]
)

Resultaat:

{ "utcOffset+04:30" : 0, "utcOffset+05:45" : 15 } 

Retourneer de minuten van een ObjectId

U kunt $minute . gebruiken om het minuutgedeelte 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 $minute . gebruiken om de minuut terug te geven dat 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"},
          "minute": { $minute: "$_id" }
        }
    }
  ]
).pretty()

Resultaat:

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

We kunnen zien dat het document is gemaakt op de 11e minuut van het 1e uur van de dag.

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


  1. MongoDB implementeren voor hoge beschikbaarheid

  2. Sorteren op maximaal matrixveld, oplopend of aflopend

  3. Prestatievergelijking van het gebruik van Redis-hashes versus veel sleutels

  4. Wat is Express.js?