sql >> Database >  >> NoSQL >> MongoDB

MongoDb Hoe groeperen op maand en jaar van string

U kunt de operators voor datumaggregatie niet gebruiken op al het andere dat een Date is object zelf. Uw ultieme beste optie is om deze "strings" te converteren naar de juiste Date objecten, zodat u deze en toekomstige bewerkingen correct kunt opvragen.

Dat gezegd hebbende, als je "strings" altijd een gemeenschappelijke structuur hebben, dan is er een manier om dit te doen met de aggregatieraamwerk hulpmiddelen. Het vereist veel manipulatie-denken dat dit geen "optimale" benadering maakt om het probleem aan te pakken. Maar met een vaste structuur van "dubbele cijfers" en een consistent scheidingsteken is dit mogelijk met de $substr operator:

db.collection.aggregate([
   { "$group": {
       "_id": {
           "year": { "$substr": [ "$dateStr", 7, 4 ] },
           "month": { "$substr": [ "$dateStr", 4, 2 ] }
       },
       "count": { "$sum": 1 }
   }}
])

Dus JavaScript-casting werkt niet binnen het aggregatieraamwerk. U kunt altijd invoer naar de pijplijn "invoeren" op basis van de evaluatie van de "clientcode", maar het aggregatieproces zelf evalueert geen code. Net als de basisquery-engine is dit allemaal gebaseerd op een "datastructuur"-implementatie die gebruikmaakt van "native operator"-instructies om het werk te doen.

U kunt tekenreeksen niet converteren naar datums in de aggregatiepijplijn. Je zou moeten werken met echte BSON Date objecten, maar je kunt het doen met strings als er een consistent formaat is dat je in een "lexicale volgorde" kunt presenteren.

Ik raad je toch aan om deze om te zetten naar BSON Dates ZSM. En pas op dat de "ISODate" of UTC-waarde is geconstrueerd met een andere tekenreeksvorm. dat wil zeggen:

new Date("2020-01-07")

In "jjjj-mm-dd" formaat zijn. Tenminste voor de JavaScript-aanroep.




  1. Hoe kunt u uw MongoDB-applicatie-upgrades testen?

  2. Correcte afhandeling van asynchrone Mongo-acties in Node Promise

  3. Hoe Apache CouchDB op CentOS 8 te installeren

  4. Limiet nr. van rijen in mongodb-invoer