sql >> Databasteknik >  >> NoSQL >> MongoDB

5 sätt att få millisekunderna från ett datum i MongoDB

Den här artikeln presenterar 5 sätt att returnera millisekundersdelen från ett Date-objekt i MongoDB.

Exempeldata

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

Följande exempel visar olika alternativ för att returnera millisekundersdelen från born fältet för dessa dokument.

$millisecond Operatör

$millisecond operatorn är utformad specifikt för att returnera ett dokument med millisekundersdelen av ett givet datum.

Vi kan köra följande kod för att returnera millisekundersdelen från born fältet i dokumentet ovan.

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

Resultat:

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

$millisecond operatören accepterar också en timezone argument.

Se MongoDB $millisecond för mer information och exempel.

$dateToString Operatör

$dateToString operatorn konverterar ett datumobjekt till en sträng enligt ett användarspecificerat format. Användaren kan därför ange att bara millisekundersdelen returneras om så krävs.

Det finns formatspecifikationer för varje datumdel. %L formatspecifikationen returnerar millisekundsdelen (3 siffror, noll vadderad).

Exempel:

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

Resultat:

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

Se MongoDB $dateToString för mer information och exempel.

$dateToParts Operatör

$dateToParts operatören returnerar ett dokument som innehåller de beståndsdelar av ett givet BSON Date-värde som individuella egenskaper. De egenskaper som returneras är year , month , day , hour , minute , second och millisecond .

Vi skulle därför kunna använda $dateToParts i ett pipelinesteg, lägg sedan till ett annat pipelinesteg som extraherar millisecond del.

Här är vad $dateToParts returnerar för våra tre dokument:

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

Detta resultat kan sedan skickas till nästa steg i pipelinen, och vi kan därför extrahera bara millisecond fältet i nästa steg.

Här är vad som händer om vi lägger till ytterligare en projektion för bara millisecond fält:

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

Resultat:

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

Så när du använder $dateToParts i din pipeline kommer du att ha tillgång till millisecond fältet (och de andra datumdelarna) i nästa steg.

Se MongoDB $dateToParts för mer information och exempel.

forEach() Metod

Du kan använda cursor.forEach() att iterera genom markören med en JavaScript-metod som getMilliseconds() eller getUTCMilliseconds() för att returnera bara millisekunderna.

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

Resultat:

123
112
7

getUTCSeconds() JavaScript-metoden returnerar ett heltal, mellan 0 och 999, som representerar millisekundersdelen av det givna datumobjektet.

getMilliseconds() metod returnerar det i lokal tid.

Du kanske också märker att de tidigare alternativen returnerar ett helt dokument som innehåller ett namn/värdepar, medan det här alternativet bara returnerar det faktiska millisekundersvärdet och inte hela dokumentet.

map() Metod

cursor.map() metoden tillämpar en funktion på varje dokument som markören besöker och kombinerar värdena till en array.

Exempel:

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

Resultat:

[ 123, 112, 7 ]


  1. Få alla python-rom-objekt i en lista

  2. Hur man kan ignorera dubblettnyckelfel på ett säkert sätt med insert_many

  3. Hur löser man mongoDB-relaterade problem effektivt?

  4. Hur frågar man kapslade objekt?