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

Линейна фуния от колекция от събития с агрегиране на MongoDB, възможно ли е?

Написах пълен отговор в моя MongoDB блог но като обобщение, това, което трябва да направите, е да проектирате действията си въз основа на това кои от тях ви интересуват, за да картографирате стойностите на полето за действие в подходящи имена на ключове, групирайки по човек, обобщавайки за трите действия, когато са ги извършили (и по желание колко пъти ) и след това проектират нови полета, които проверяват дали действие2 е извършено след действие1 и действие3 е извършено след действие2... Последната фаза просто обобщава броя на хората, които са направили само 1, или 1 и след това 2, или 1 и след това 2 и след това 3.

С помощта на функция за генериране на тръбопровода за агрегиране е възможно да се генерират резултати въз основа на масив от предадени действия.

В моя тестов случай целият конвейер работи за под 200 ms за колекция от 40 000 документа (това беше на моя малък лаптоп).

Както беше правилно отбелязано, общото решение, което описвам, предполага, че докато актьорът може да предприеме каквото и да е действие няколко пъти, той може да премине само от действие1 към действие2, но не може да прескочи директно от действие1 към действие3 (тълкувайки реда на действие като описващ предпоставки, където не можете да извършите действие 3, докато не извършите действие 2).

Както се оказва, рамката за агрегиране може да се използва дори за поредици от събития, където редът е напълно произволен, но все пак искате да знаете колко хора в даден момент са извършили последователността действие1, действие2, действие3.

Основната корекция, която трябва да направите на оригиналния отговор, е да добавите допълнителна двуетапна стъпка в средата. Тази стъпка отвива събрания от лице документ, за да го прегрупира, намирайки първото появяване на второто действие, което идва след първото появяване на първото действие.

След като имаме това, последното сравнение става за действие1, последвано от най-ранното появяване на действие2 и сравняваме това с последното появяване на действие3.

Вероятно може да се обобщи за обработка на произволен брой събития, но всяко допълнително събитие след две ще добави още два етапа към агрегацията.

Ето моето описание на модификацията на тръбопровода за да постигнете отговора, който търсите.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Заявете MongoDB с критерии за дължина

  2. Грешка при сериализиране на Django към JSON:Обектът „MetaDict“ няма атрибут „concrete_model“

  3. Първи стъпки с MongoDB User Management

  4. Получаване на хеш със символ като ключове за mongo в rails

  5. Най-добрият начин да направите заявка за всички документи от колекция mongodb по реактивен начин без наводняване на RAM