sql >> Databáze >  >> NoSQL >> MongoDB

MongoDb Jak seskupit podle měsíce a roku z řetězce

Nemůžete použít operátory agregace data na cokoli jiného, ​​co je Date samotný objekt. Nejlepší možností je převést tyto „řetězce“ na správné Date objektů, abyste mohli správně dotazovat v této i budoucích operacích.

To znamená, že pokud vaše „řetězce“ mají vždy společnou strukturu, existuje způsob, jak to udělat pomocí rámec agregace nástroje. Vyžaduje to hodně manipulačního myšlení, které z toho nedělá „optimální“ přístup k řešení problému. Ale s nastavenou strukturou "dvojitých číslic" a konzistentním oddělovačem je to možné pomocí $substr operátor:

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

Odesílání JavaScriptu tedy v rámci agregace nefunguje. Vždy můžete „vložit“ vstup do kanálu na základě vyhodnocení „klientského kódu“, ale samotný proces agregace žádný kód nevyhodnocuje. Stejně jako základní dotazovací stroj je vše založeno na implementaci „datové struktury“, která k provedení práce používá pokyny „nativního operátora“.

Řetězce nelze převést na data v agregačním kanálu. Měli byste pracovat se skutečným BSON Date objektů, ale můžete to udělat pomocí řetězců, pokud existuje konzistentní formát, který můžete prezentovat v "lexikálním pořadí".

Stále doporučuji, abyste je převedli na BSON Dates CO NEJDŘÍVE. A mějte na paměti, že hodnota "ISODate" nebo UTC je vytvořena v jiném tvaru řetězce. tj.:

new Date("2020-01-07")

Ve formátu „rrrr-mm-dd“. Alespoň pro vyvolání JavaScriptu.




  1. MongoDB na Androidu

  2. Aktualizujte pole v ovladači pole mongodb c#

  3. Odpověď mongodb objectDB v Jersey API-REST

  4. Chcete získat křišťálově jasnou strukturu aplikace NodeJS (Full JavaScript Stack)