Tôi đã viết một câu trả lời đầy đủ trên blog MongoDB của tôi nhưng như một bản tóm tắt, những gì bạn phải làm là chiếu các hành động của mình dựa trên những hành động mà bạn quan tâm để ánh xạ các giá trị của trường hành động thành các tên khóa thích hợp, nhóm theo từng người tổng hợp cho ba hành động khi họ đã thực hiện chúng (và tùy chọn số lần ) và sau đó chiếu các trường mới để kiểm tra xem hành động2 đã được thực hiện sau hành động1 chưa và hành động3 đã được thực hiện sau hành động2 ... Giai đoạn cuối chỉ tính tổng số người đã thực hiện chỉ 1, hoặc 1 rồi đến 2, hoặc 1 rồi đến 2 và sau đó 3.
Sử dụng một hàm để tạo đường dẫn tổng hợp, bạn có thể tạo kết quả dựa trên mảng các hành động được chuyển vào.
Trong trường hợp thử nghiệm của tôi, toàn bộ đường dẫn chạy dưới 200ms cho bộ sưu tập 40.000 tài liệu (đây là trên máy tính xách tay nhỏ của tôi).
Như nó đã được chỉ ra một cách chính xác, giải pháp chung mà tôi mô tả là giả định rằng trong khi một tác nhân có thể thực hiện bất kỳ hành động nào nhiều lần mà họ chỉ có thể chuyển từ hành động1 sang hành động2 nhưng họ không thể bỏ qua trực tiếp từ hành động1 đến hành động3 (diễn giải thứ tự hành động như mô tả các điều kiện tiên quyết trong đó bạn không thể thực hiện hành động3 cho đến khi bạn thực hiện hành động2).
Hóa ra, khung tổng hợp có thể được sử dụng ngay cả cho các chuỗi sự kiện mà thứ tự là hoàn toàn tùy ý nhưng bạn vẫn muốn biết có bao nhiêu người tại một thời điểm nào đó đã thực hiện chuỗi action1, action2, action3.
Điều chỉnh chính cần thực hiện trên câu trả lời ban đầu là thêm một bước bổ sung hai giai đoạn ở giữa. Bước này giải nén tài liệu được thu thập bởi từng người để nhóm lại tài liệu, tìm kiếm lần xuất hiện đầu tiên của hành động thứ hai xảy ra sau lần xuất hiện đầu tiên của hành động đầu tiên.
Khi chúng ta có rằng phép so sánh cuối cùng sẽ trở thành hành động1, tiếp theo là lần xuất hiện sớm nhất của hành động2 và so sánh với lần xuất hiện mới nhất của hành động3.
Nó có thể được khái quát hóa để xử lý số lượng sự kiện tùy ý nhưng mỗi sự kiện bổ sung trước hai sự kiện sẽ thêm hai giai đoạn nữa vào tổng hợp.
Đây là bản ghi của tôi về sửa đổi đường ống để đạt được câu trả lời bạn đang tìm kiếm.