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

5 måder at få sekunderne fra en date på i MongoDB

Denne artikel præsenterer 5 måder at returnere sekunddelen 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 sekunderdelen fra born felt af disse dokumenter.

$second Operatør

$second operatør er designet specifikt til at returnere et dokument med sekunddelen af ​​en given dato.

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

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

Resultat:

{ "birthSecond" : 15 }
{ "birthSecond" : 20 }
{ "birthSecond" : 1 }

Du kan også angive tidszonen, når du bruger $second operatør.

Se MongoDB $second 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 sekunderdelen returneres, hvis det kræves.

Der er formatspecifikationer for hver datodel. %S formatspecifikationen returnerer den anden del (2 cifre, nul polstret).

Eksempel:

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

Resultat:

{ "birthSecond" : "15" }
{ "birthSecond" : "20" }
{ "birthSecond" : "01" }

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 second 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 så videresendes til næste trin i pipelinen, og vi kan derfor kun udtrække second felt i næste fase.

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

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

Resultat:

{ "birthSecond" : 15 }
{ "birthSecond" : 20 }
{ "birthSecond" : 1 }

Så hver gang du bruger $dateToParts i din pipeline, vil du have adgang til second 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 getSeconds() eller getUTCSeconds() for at returnere kun sekunderne.

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

Resultat:

15
20
1

getUTCSeconds() JavaScript-metoden returnerer et heltal mellem 0 og 59, der repræsenterer sekunderne på den givne dato i henhold til universel tid.

getSeconds() 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 sekundervæ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 til en matrix.

Eksempel:

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

Resultat:

[ 15, 20, 1 ]

  1. Sådan kontrolleres en kolonnes datatype i SQL

  2. mongoose/mongodb forespørgsel på flere sorter

  3. Mongoose password hashing

  4. Fejl ved forbindelse til MongoDb Atlas Server