sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man formaterar datumet i MongoDB

Om du har dokument som lagrar datum som Date-objekt, men du vill returnera dem i ett annat format, kan du använda $dateToString samlad rörledningsoperatör.

Till exempel kanske du vill att ett datum ska returneras i mm/dd/yyyy format istället för den långa ISODate() format som inkluderar minuter, sekunder, millisekunder osv

$dateToString operatorn konverterar Date-objektet till en sträng och låter dig eventuellt ange ett format för den resulterande utdata.

Exempel

Anta att vi har en samling som heter cats med följande dokument:

{ "_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 använda $dateToString för att returnera dokumentet med datum i ett annat format.

Låt oss till exempel ta bort sekunderna och millisekunderna från datumet:

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 kunde formatera datumet genom att använda format parameter. Detta är en valfri parameter som låter dig använda noll eller fler formatspecifikationer för att ange hur datumet ska formateras.

Se MongoDB $dateToString Formatspecifikationer för en fullständig lista över formatspecifikationer som kan användas med $dateToString operatör.

Datum i dd/mm/yyyy Formatera

Här är ett annat exempel som konverterar datumen till 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" }

Datum i mm/dd/yyyy Formatera

Eller för att lägga det i mm/dd/yyyy format, kan vi helt enkelt byta om de två första formatspecifikationerna:

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

Returnera en enstaka datumdel

Du kan inkludera så många eller så få formatspecifikationer som du vill. Du kan till exempel använda bara en formatspecifikation för att bara skriva ut årsdelen av datumet.

Exempel:

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

Resultat:

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

Tänk dock på att det finns andra sätt att extrahera en enda datumdel från ett Date-objekt. Du kan till exempel använda $year operatör att ta ut året.

Här är de olika operatorerna för att extrahera varje specifik datumdel:

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

Du kan också använda $dateToParts operatör för att returnera ett dokument som innehåller alla olika datumdelar separerade i sitt eget fält.


  1. Varför använder inte MongoDB index-korsning?

  2. Prestandajämförelse för att använda Redis-hashar kontra många nycklar

  3. Skillnader mellan Microsoft.Extensions.Cashing.Redis och Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache

  4. Varför du fortfarande borde använda MMAPv1 Storage Engine för MongoDB