MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Làm cách nào để đếm nhiều khóa trong cùng một truy vấn tổng hợp MongoDB $ group?

Có một số cách tiếp cận khác nhau mà bạn có thể sử dụng tại đây:

  1. Sử dụng bản đồ / thu nhỏ:không làm điều này. Ngay bây giờ, việc chạy khung tổng hợp sẽ nhanh hơn gấp 3 lần so với việc sử dụng chức năng thu gọn bản đồ cho trường hợp sử dụng này.

  2. Chạy tổng hợp 3 lần. Đây không phải là tối ưu, nhưng nếu bạn không bị hạn chế về thời gian thì đây là lựa chọn dễ dàng nhất. Nếu quá trình tổng hợp của bạn vẫn mất

  3. Đây là công việc tốt nhất mà tôi có thể nghĩ ra. $group toán tử cho phép bạn tạo _id trên nhiều trường. Ví dụ. {"_id":{"a":"$key1", "b":"$key2", "c":"$key3"}} . Làm điều này sẽ tạo một nhóm cho tất cả các tổ hợp phím khác nhau hiện có của bạn. Bạn có thể nhóm các khóa của mình theo cách này và sau đó tổng hợp theo cách thủ công trên các kết quả trong ứng dụng khách.

Hãy để tôi nói rõ hơn. Giả sử chúng ta có một bộ sưu tập các hình dạng. Những hình dạng này có thể có màu sắc, kích thước và loại (hình vuông, hình tròn, v.v.). Tổng hợp trên Id nhiều khóa có thể giống như sau:

db.shapes.aggregate({$group:{_id:{"f1":"$f1", "f2":"$f2", "f3":"$f3"}, count:{"$sum":1}}})

và trả lại:

"result" : [
        {
            "_id" : {
                "f1" : "yellow",
                "f2" : "medium",
                "f3" : "triangle"
            },
            "count" : 4086
        },
        {
            "_id" : {
                "f1" : "red",
                "f2" : "small",
                "f3" : "triangle"
            },
            "count" : 4138
        },
        {
            "_id" : {
                "f1" : "red",
                "f2" : "big",
                "f3" : "square"
            },
            "count" : 4113
        },
        {
            "_id" : {
                "f1" : "yellow",
                "f2" : "small",
                "f3" : "triangle"
            },
            "count" : 4145
        },
        {
            "_id" : {
                "f1" : "red",
                "f2" : "small",
                "f3" : "square"
            },
            "count" : 4062
        }

... và như vậy

Sau đó, bạn sẽ tổng hợp các kết quả ở phía máy khách, với số lượng mục nhập giảm đáng kể. Giả sử số lượng giá trị duy nhất cho mỗi khóa đủ nhỏ so với tổng số tài liệu, bạn có thể thực hiện bước cuối cùng này trong một khoảng thời gian không đáng kể.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Lấy mẫu ngẫu nhiên từ Mongo

  2. Gọi lại Async Mongoose trong câu lệnh then

  3. mongodb:trích xuất dấu thời gian từ ObjectID trong truy vấn json

  4. MongoException:không cho phép các khóa có độ dài bằng 0, bạn đã sử dụng $ với dấu ngoặc kép chưa?

  5. Làm thế nào để sử dụng MongoDB Ruby Driver để tạo một Nhóm (nhóm theo)?