sql >> Database >  >> NoSQL >> MongoDB

5 manieren om de minuten van een date in MongoDB te krijgen

Dit artikel presenteert 5 manieren om het minutengedeelte van een Date-object in MongoDB te retourneren.

Voorbeeldgegevens

Stel dat we een verzameling hebben met de naam cats met de volgende documenten:

{ "_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 volgende voorbeelden demonstreren verschillende opties voor het retourneren van het minutengedeelte van de born veld van die documenten.

De $minute Operator

De $minute operator is speciaal ontworpen om een ​​document terug te sturen met het minutengedeelte van een bepaalde datum.

We kunnen de volgende code uitvoeren om het minutengedeelte van de born . te retourneren veld in bovenstaand document.

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

Resultaat:

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

U kunt ook de tijdzone specificeren bij gebruik van de $minute exploitant.

Zie MongoDB $minute voor meer informatie en voorbeelden.

De $dateToString Operator

De $dateToString operator converteert een datumobject naar een string volgens een door de gebruiker gespecificeerd formaat. De gebruiker kan daarom specificeren dat alleen het minutengedeelte wordt geretourneerd indien nodig.

Er zijn formaatspecificaties voor elk datumgedeelte. De %M formaatspecificatie retourneert het minutengedeelte.

Voorbeeld:

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

Resultaat:

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

U kunt ook %Z . gebruiken om de minutenverschuiving van UTC als een getal terug te geven.

Zie MongoDB $dateToString voor meer informatie en voorbeelden.

De $dateToParts Operator

De $dateToParts operator retourneert een document dat de samenstellende delen van een bepaalde BSON-datumwaarde als individuele eigenschappen bevat. De geretourneerde eigenschappen zijn year , month , day , hour , minute , second en millisecond .

We zouden daarom $dateToParts . kunnen gebruiken in één pijplijnfase, voeg dan een andere pijplijnfase toe die de minute . extraheert onderdeel.

Dit is wat $dateToParts retouren voor onze drie documenten:

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

Resultaat:

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

Dit resultaat kan vervolgens worden doorgegeven aan de volgende fase in de pijplijn om alleen de minute . te extraheren veld.

Dit is wat er gebeurt als we nog een projectie toevoegen voor slechts de minute veld:

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

Resultaat:

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

Dus als u $dateToParts . gebruikt in je pijplijn zit, heb je dan toegang tot de minute veld (en alle andere velden) in de volgende fase.

Zie MongoDB $dateToParts voor meer informatie en voorbeelden.

De forEach() Methode

U kunt cursor.forEach() . gebruiken om door de cursor te gaan, met behulp van een JavaScript-methode zoals getMinutes() of getUTCMinutes() om alleen de minuten terug te geven.

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

Resultaat:

30
0
45

De getUTCMinutes() De JavaScript-methode retourneert een geheel getal tussen 0 en 59, dat de minuten in de opgegeven datum vertegenwoordigt volgens de universele tijd.

De getMinutes() methode geeft het terug in lokale tijd.

U zult misschien ook merken dat de vorige opties een heel document retourneren dat een naam/waarde-paar bevat, terwijl deze optie alleen de werkelijke minutenwaarde retourneert en niet het hele document.

De map() Methode

De cursor.map() methode past een functie toe op elk document dat door de cursor wordt bezocht en combineert de waarden in een array.

Voorbeeld:

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

Resultaat:

[ 30, 0, 45 ]

  1. Redis onder Klassiek ASP (VBScript)

  2. Wat is de juiste manier om de Redis-verbinding in Tornado af te handelen? (Async - Pub/Sub)

  3. Meerdere velden in een MongoDB-document bijwerken

  4. Kan PyMongo ObjectId niet deserialiseren van JSON