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

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

Denne artikel præsenterer 5 måder at returnere minutdelen fra et Dato-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:47Z") }
{ "_id" : 3, "name" : "Fluffy", "born" : ISODate("2020-09-24T10:45:00Z") }

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

$minute Operatør

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

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

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

Resultat:

{ "birthMinute" : 30 }
{ "birthMinute" : 0 }
{ "birthMinute" : 45 }

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

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

Der er formatspecifikationer for hver datodel. %M formatspecifikationen returnerer minutdelen.

Eksempel:

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

Resultat:

{ "birthMinute" : "30" }
{ "birthMinute" : "00" }
{ "birthMinute" : "45" }

Du kan også bruge %Z for at returnere minutforskydningen fra UTC som et tal.

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 minute 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" : 47,
		"millisecond" : 0
	}
}
{
	"dateParts" : {
		"year" : 2020,
		"month" : 9,
		"day" : 24,
		"hour" : 10,
		"minute" : 45,
		"second" : 0,
		"millisecond" : 0
	}
}

Dette resultat kan derefter overføres til næste trin i pipelinen for at udtrække kun minute felt.

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

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

Resultat:

{ "birthMinute" : 30 }
{ "birthMinute" : 0 }
{ "birthMinute" : 45 }

Så hvis du bruger $dateToParts i din pipeline, vil du derefter have adgang til minute felt (og alle andre felter) 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 at bruge en JavaScript-metode såsom getMinutes() eller getUTCMinutes() for at returnere blot minutterne.

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

Resultat:

30
0
45

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

getMinutes() 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 minutvæ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.getUTCMinutes();
    return c;
  }
);

Resultat:

[ 30, 0, 45 ]

  1. Indsæt en værdi på en bestemt position i et array i MongoDB

  2. mongoose forskel på findOneAndUpdate og opdatering

  3. Få Redis-nøgler og -værdier ved kommandoprompt

  4. GSSException:Ingen gyldige legitimationsoplysninger angivet (mekanismeniveau:Kunne ikke finde nogen Kerberos-tgt)