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

Sådan formateres datoen i MongoDB

Hvis du har dokumenter, der gemmer datoer som Dato-objekter, men du vil returnere dem i et andet format, kan du bruge $dateToString aggregeret rørledningsoperatør.

For eksempel vil du måske have en dato returneret i mm/dd/yyyy format i stedet for den lange ISODate() format, der inkluderer minutter, sekunder, millisekunder osv.

$dateToString operatoren konverterer Dato-objektet til en streng og giver dig mulighed for at angive et format for det resulterende output.

Eksempel

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") }

Vi kan bruge $dateToString for at returnere det pågældende dokument med datoerne i et andet format.

Lad os f.eks. fjerne sekunderne og millisekunderne fra datoen:

db.cats.aggregate(
   [
     {
       $project: {
          name: 1,
          formattedDate: { $dateToString: { format: "%Y-%m-%d %H:%M", date: "$born" } }
       }
     }
   ]
)

Resultat:

{ "_id" : 1, "name" : "Scratch", "formattedDate" : "2021-01-03 23:30" }
{ "_id" : 2, "name" : "Meow", "formattedDate" : "2019-12-08 04:00" }
{ "_id" : 3, "name" : "Fluffy", "formattedDate" : "2020-09-24 10:45" }

Vi var i stand til at formatere datoen ved at bruge format parameter. Dette er en valgfri parameter, der giver dig mulighed for at bruge nul eller flere formatangivelser til at angive, hvordan datoen skal formateres.

Se MongoDB $dateToString Formatspecifikationer for en komplet liste over formatspecifikationer, der kan bruges med $dateToString operatør.

Dato i dd/mm/yyyy Formater

Her er et andet eksempel, der konverterer datoerne til dd/mm/yyyy format:

db.cats.aggregate(
   [
     {
       $project: {
          _id: 0,
          formattedDate: { $dateToString: { format: "%d/%m/%Y", date: "$born" } }
       }
     }
   ]
)

Resultat:

{ "formattedDate" : "03/01/2021" }
{ "formattedDate" : "08/12/2019" }
{ "formattedDate" : "24/09/2020" }

Dato i mm/dd/yyyy Formater

Eller for at sætte det i mm/dd/yyyy format, kan vi simpelthen skifte mellem de to første formatspecifikationer:

db.cats.aggregate(
   [
     {
       $project: {
          _id: 0,
          formattedDate: { $dateToString: { format: "%m/%d/%Y", date: "$born" } }
       }
     }
   ]
)

Resultat:

{ "formattedDate" : "01/03/2021" }
{ "formattedDate" : "12/08/2019" }
{ "formattedDate" : "09/24/2020" }

Returnering af en enkelt datodel

Du kan inkludere så mange eller så få formatspecifikationer, som du ønsker. For eksempel kan du kun bruge én formatspecifikation til kun at udskrive årsdelen af ​​datoen.

Eksempel:

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

Resultat:

{ "formattedDate" : "2021" }
{ "formattedDate" : "2019" }
{ "formattedDate" : "2020" }

Husk dog, at der er andre måder at udtrække kun en enkelt datodel fra et Date-objekt. For eksempel kan du bruge $year operatør for at udtrække året.

Her er de forskellige operatører til at udtrække hver specifik datodel:

  • $dayOfWeek
  • $dayOfMonth
  • $dayOfYear
  • $hour
  • $isoWeek
  • $isoWeekYear
  • $isoDayOfWeek
  • $millisecond
  • $minute
  • $month
  • $second
  • $week
  • $year

Du kan også bruge $dateToParts operatør for at returnere et dokument, der indeholder alle de forskellige datodele adskilt i deres eget felt.


  1. Hvordan gemmes dataene i en MongoDB-database på disken?

  2. Sådan gemmer du en kompleks indlejret JSON i Redis ved hjælp af Python

  3. MongoDB begrænse lagerstørrelse?

  4. Hvordan bruger StackExchange.Redis flere endepunkter og forbindelser?