sql >> Databasteknik >  >> NoSQL >> MongoDB

5 sätt att få sekunderna från en dejt i MongoDB

Den här artikeln presenterar 5 sätt att returnera sekunddelen 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 sekunddelen från born fältet för dessa dokument.

$second Operatör

$second operatören är utformad specifikt för att returnera ett dokument med sekunddelen av ett givet datum.

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

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

Resultat:

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

Du kan också ange tidszonen när du använder $second operatör.

Se MongoDB $second 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 sekundersdelen returneras om så krävs.

Det finns formatspecifikationer för varje datumdel. %S formatspecifikationen returnerar den andra delen (2 siffror, noll vadderad).

Exempel:

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

Resultat:

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

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 den second 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 den second fältet i nästa steg.

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

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

Resultat:

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

Så när du använder $dateToParts i din pipeline kommer du att ha tillgång till second 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 getSeconds() eller getUTCSeconds() för att returnera bara sekunderna.

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

Resultat:

15
20
1

getUTCSeconds() JavaScript-metoden returnerar ett heltal, mellan 0 och 59, som representerar sekunderna i det givna datumet enligt universell tid.

getSeconds() 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 sekundervä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.getUTCSeconds();
    return c;
  }
);

Resultat:

[ 15, 20, 1 ]

  1. Vad är ett rent sätt att stoppa mongod på Mac OS X?

  2. MongoDB som kötjänst?

  3. Apache HBase Regionsdelning och sammanslagning

  4. MongoDB välj var i array av _id?