MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDb Как да групирате по месец и година от низ

Не можете да използвате операторите за агрегиране на дати върху всичко друго, което е Date самия обект. Вашият най-добър вариант е да конвертирате тези „низове“ в правилни Date обекти, за да можете да правите заявки правилно в тази и бъдещи операции.

Въпреки това, ако вашите „низове“ винаги имат обща структура, тогава има начин да направите това с рамка за агрегиране инструменти. Това изисква много мисъл за манипулиране, което не го прави "оптимален" подход за справяне с проблема. Но със зададена структура от „двойни цифри“ и последователен разделител това е възможно с $substr оператор:

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

Така че кастингът на JavaScript не работи в рамките на агрегацията. Винаги можете да „подавате“ вход към тръбопровода въз основа на оценка на „клиентски код“, но самият процес на агрегиране не оценява никакъв код. Точно като основната машина за заявки, всичко това се основава на внедряване на „структура на данни“, която използва инструкции на „родния оператор“, за да свърши работата.

Не можете да конвертирате низове в дати в конвейера за агрегиране. Трябва да работите с истински BSON Date обекти, но можете да го направите с низове, ако има последователен формат, който можете да представите в "лексикален ред".

Все пак предлагам да ги конвертирате в BSON Dates ВЪЗМОЖНО НАЙ-СКОРО. И внимавайте, че стойността "ISODate" или UTC е конструирана с различна форма на низ. т.е.:

new Date("2020-01-07")

Във формат "гггг-мм-дд". Поне за извикването на JavaScript.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB/Mongoose заявка на определена дата?

  2. Как да намеря топ 5 стойности в mongodb? и не трябва да съдържа същата стойност

  3. MongoDB:Заявката има имплицитно ограничение (256)?

  4. mongoDB Преименуване на вградено поле

  5. MongoDB:Копиране на масив в друг масив в същия документ