sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDb Sådan grupperes efter måned og år fra streng

Du kan ikke bruge datoaggregationsoperatorerne på alt andet, der er en Date objektet selv. Din ultimative bedste mulighed er at konvertere disse "strenge" til korrekte Date objekter, så du kan forespørge korrekt i denne og fremtidige operationer.

Når det er sagt, hvis dine "strenge" altid har en fælles struktur, så er der en måde at gøre dette på med aggregeringsramme værktøjer. Det kræver en masse manipulationstanke, der ikke gør dette til en "optimal" tilgang til at håndtere problemet. Men med en fast struktur med "dobbeltcifre" og en konsekvent afgrænsning er dette muligt med $substr operatør:

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

Så JavaScript-casting fungerer ikke inden for aggregeringsrammen. Du kan altid "feede" input til pipelinen baseret på "klientkode"-evaluering, men selve aggregeringsprocessen evaluerer ikke nogen kode. Ligesom den grundlæggende forespørgselsmotor er dette alt sammen baseret på en "datastruktur"-implementering, der bruger "native operator"-instruktioner til at udføre arbejdet.

Du kan ikke konvertere strenge til datoer i aggregeringspipelinen. Du bør arbejde med ægte BSON Date objekter, men du kan gøre det med strenge, hvis der er et konsistent format, som du kan præsentere i en "leksikalsk rækkefølge".

Jeg foreslår stadig, at du konverterer disse til BSON Dates ASAP. Og pas på, at "ISOdate"- eller UTC-værdien er konstrueret med en anden strengform. dvs.:

new Date("2020-01-07")

I formatet "åååå-mm-dd". I det mindste for JavaScript-indkaldelsen.




  1. Konverter en streng til et tal i MongoDB-projektion

  2. Visning af billeder i Angular.js fra MongoDB

  3. Hvordan skal jeg bygge min DB- og API-server til et turbaseret iPhone-brætspil med flere spillere? (tænker på nodejs, mongo, sofa osv.)

  4. MongoDB/Meteor:Tilføj unikt ID til hvert array-element