sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB $sekund

I MongoDB er $second aggregeringspipeline-operatør returnerer den anden del af en dato som et tal mellem 0 og 59 . Værdien kan også være 60 at tage højde for springsekunder, når det er relevant.

Du kan valgfrit angive en tidszone, der skal bruges til resultatet.

$second operatøren accepterer enten en dato (som enten en dato, et tidsstempel eller et objekt-id) eller et dokument, der angiver dato og tidszone, der skal bruges.

Eksempel

Antag, at vi har en samling kaldet pets med følgende dokument:

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

Vi kan køre følgende kode for at udtrække den anden del fra born felt i det pågældende dokument.

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

Resultat:

{ "birthSecond" : 15 }

Her brugte jeg birthSecond som feltnavnet, der skal returneres, men dette kunne have været hvad som helst (såsom secondsAtBirth , seconds , etc).

_id felt returneres som standard ved brug af projektioner i MongoDB, men i dette eksempel skjulte jeg eksplicit _id felt ved hjælp af _id: 0 .

Angiv en tidszone

Du kan angive en tidszone, der skal bruges til output af $second operatør.

Når du gør dette, blev argumentet sendt til $second skal have følgende form:

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

Hvor <dateExpression> er den dato, der skal bruges, og <tzExpression> er den tidszone, der skal bruges.

Tidszonen kan angives ved hjælp af enten Olsons tidszone-id (f.eks. "Europe/London" , "GMT" ) eller UTC offset (f.eks. "+02:30" , "-1030" ).

Olson Timezone Identifier

Her er et eksempel, der udsender sekunderne i to forskellige tidszoner, hver ved hjælp af Olsons tidszone-id'er:

db.pets.aggregate(
  [
    {
      $project: {
          _id: 0,
          kabul: { 
            $second: { date: "$born", timezone: "Asia/Kabul" }
            },
          brisbane: { 
            $second: { date: "$born", timezone: "Australia/Brisbane" }
            }
        }
    }
  ]
)

Resultat:

{ "kabul" : 15, "brisbane" : 15 } 

Da tidszoneændringen ikke påvirker sekunderdelen, er resultatet det samme.

UTC offset

I dette eksempel bruger vi UTC offset.

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

Resultat:

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

Returner sekunderne fra et objekt-id

Du kan bruge $second for at returnere sekunddelen fra et ObjectId.

ObjectId-værdier er 12 byte hexadecimale værdier, der består af:

  • En tidsstempelværdi på 4 byte, der repræsenterer objekt-id'ets oprettelse, målt i sekunder siden Unix-epoken.
  • En 5 byte er en tilfældig værdi
  • En 3 byte-tæller, initialiseret til en tilfældig værdi.

For at opsummere ser vores dokument sådan ud:

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

Dette dokument indeholder et ObjectId. Vi kan derfor bruge $second for at returnere det sekund, vores dokument blev oprettet (eller mere specifikt, når _id feltets ObjectId-værdi blev oprettet).

Eksempel:

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

Resultat:

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

Vi kan se, at dokumentet blev oprettet den 35. sekund (af det 11. minut af den 1. time på dagen).

I dette tilfælde brugte jeg også $toDate aggregeringspipeline-operatør for at returnere tidsstempeldelen af ​​ObjectId.


  1. mongodb tekstsøgning ved hjælp af flere sprog

  2. MongoDB Aggregation:Beregn løbende totaler fra summen af ​​tidligere rækker

  3. Benchmarking MongoDB - Driving NoSQL Performance

  4. MongoDB $rand