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

5 måder at få millisekunderne fra en date i MongoDB

Denne artikel præsenterer 5 måder at returnere millisekundersdelen fra et Date-objekt i MongoDB.

Eksempel på data

Antag, at vi har en samling kaldet cats med følgende dokumenter:

{ "_id" : 1, "name" : "Scratch", "born" : ISODate("2021-01-03T23:30:15.123Z") }
{ "_id" : 2, "name" : "Meow", "born" : ISODate("2019-12-08T04:00:20.112Z") }
{ "_id" : 3, "name" : "Fluffy", "born" : ISODate("2020-09-24T10:45:01.007Z") }

De følgende eksempler viser forskellige muligheder for at returnere millisekundersdelen fra born felt af disse dokumenter.

$millisecond Operatør

$millisecond operatoren er designet specifikt til at returnere et dokument med millisekunderdelen af ​​en given dato.

Vi kan køre følgende kode for at returnere millisekunderdelen fra born felt i ovenstående dokument.

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          birthMillisecond: { $millisecond: "$born" }
        }
    }
  ]
)

Resultat:

{ "birthMillisecond" : 123 }
{ "birthMillisecond" : 112 }
{ "birthMillisecond" : 7 }

$millisecond operatøren accepterer også en timezone argument.

Se MongoDB $millisecond for mere information og eksempler.

$dateToString Operatør

$dateToString operator konverterer et datoobjekt til en streng i henhold til et brugerspecificeret format. Brugeren kan derfor angive, at kun millisekunderdelen returneres, hvis det kræves.

Der er formatspecifikationer for hver datodel. %L formatspecifikationen returnerer millisekunddelen (3 cifre, nul polstret).

Eksempel:

db.cats.aggregate(
   [
     {
       $project: {
         _id: 0,
          birthMillisecond: { $dateToString: { format: "%L", date: "$born" } }
       }
     }
   ]
)

Resultat:

{ "birthMillisecond" : "123" }
{ "birthMillisecond" : "112" }
{ "birthMillisecond" : "007" }

Se MongoDB $dateToString for mere information og eksempler.

$dateToParts Operatør

$dateToParts operatør returnerer et dokument, der indeholder de bestanddele af en given BSON Date-værdi som individuelle egenskaber. De returnerede egenskaber er year , month , day , hour , minute , second og millisecond .

Vi kunne derfor bruge $dateToParts i et pipeline-trin, tilføj derefter et andet pipeline-trin, der uddrager millisecond del.

Her er hvad $dateToParts returnerer for vores tre dokumenter:

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          dateParts: { $dateToParts: { date: "$born" } }
        }
    }
  ]
).pretty()

Resultat:

{
	"dateParts" : {
		"year" : 2021,
		"month" : 1,
		"day" : 3,
		"hour" : 23,
		"minute" : 30,
		"second" : 15,
		"millisecond" : 123
	}
}
{
	"dateParts" : {
		"year" : 2019,
		"month" : 12,
		"day" : 8,
		"hour" : 4,
		"minute" : 0,
		"second" : 20,
		"millisecond" : 112
	}
}
{
	"dateParts" : {
		"year" : 2020,
		"month" : 9,
		"day" : 24,
		"hour" : 10,
		"minute" : 45,
		"second" : 1,
		"millisecond" : 7
	}
}

Dette resultat kan derefter overføres til næste trin i pipelinen, og vi kan derfor kun udtrække millisecond felt i næste fase.

Her er, hvad der sker, hvis vi tilføjer endnu en projektion i blot millisecond felt:

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          dateParts: { $dateToParts: { date: "$born" } }
        }
    },
    {
      $project:
        {
          birthMillisecond: "$dateParts.millisecond"
        }
    }
  ]
)

Resultat:

{ "birthMillisecond" : 123 }
{ "birthMillisecond" : 112 }
{ "birthMillisecond" : 7 }

Så hver gang du bruger $dateToParts i din pipeline vil du have adgang til millisecond felt (og de andre datodele) i næste fase.

Se MongoDB $dateToParts for mere information og eksempler.

forEach() Metode

Du kan bruge cursor.forEach() at iterere gennem markøren ved hjælp af en JavaScript-metode såsom getMilliseconds() eller getUTCMilliseconds() for at returnere kun millisekunderne.

db.cats.find().forEach(
  function(c) {
    print(
      c.born.getUTCMilliseconds()
      );
  }
);

Resultat:

123
112
7

getUTCSeconds() JavaScript-metoden returnerer et heltal mellem 0 og 999, der repræsenterer millisekunderdelen af ​​det givne datoobjekt.

getMilliseconds() metode returnerer det i lokal tid.

Du kan også bemærke, at de tidligere muligheder returnerer et helt dokument, der indeholder et navn/værdi-par, hvorimod denne indstilling kun returnerer den faktiske millisekunderværdi og ikke hele dokumentet.

map() Metode

cursor.map() metoden anvender en funktion på hvert dokument, der besøges af markøren og kombinerer værdierne i en matrix.

Eksempel:

db.cats.find().map(
  function(c) {
    c = c.born.getUTCMilliseconds();
    return c;
  }
);

Resultat:

[ 123, 112, 7 ]


  1. Er master altid omdisponeret instans med mindste prioritet?

  2. Fjern med _id i MongoDB-konsollen

  3. Redis vil ikke hente data fra cachen

  4. Redis - Overvej at omdøbe en af ​​bønnerne eller aktivere tilsidesættelse ved at indstille spring.main.allow-bean-definition-overriding=true