2016-08-11 17 views
5

Tôi đang tìm cách để có được số hai (hoặc bất kỳ số nào khác) trên cùng của một yếu tố cụ thể từ bộ sưu tập đã cho.Làm thế nào để duy trì (các) yếu tố hàng đầu của các phần tử mảng trong mongoDB?

{"id": "xyz" , "fruits": ["Apple", "Mango"]} 
{"id": "abx", "fruits": ["Apple", "Banana"]} 
{"id" : "pqr", "fruits": ["Apple", "Mango"]} 

Đối với ví dụ trên, kết quả sẽ là: Apple and Mango vì sự xuất hiện của Apple (ba lần) là cao hơn tiếp theo Mango (hai lần). Tôi có cần sử dụng chức năng Mongo map-reduce không?

Tôi nghiêng về phía hiệu suất và tính ổn định của nền tảng phụ trợ. Làm thế nào tôi có thể tiến lên nếu "số lần xuất hiện" xảy ra trong thời gian thực?

Mọi trợ giúp đều đáng được đánh giá cao.

Trả lời

2

Bạn có thể sử dụng tổng hợp. Dưới đây là một ví dụ đơn giản giả định rằng giá trị trái cây sẽ không được lặp lại trong một tài liệu duy nhất:

[ 
    { 
     $unwind: "$fruits" 
    }, 
    { 
     $group: { 
      _id: "$fruits", 
      count: {$sum: 1} 
     } 
    }, 
    { 
     $sort: {count:-1} 
    }, 
    { 
     $limit: 2 
    } 
] 
+1

Để thực hiện, bạn có thể muốn tạo 'trái cây' và vô hiệu hóa '_id' như là bước đầu tiên vì nó có thể sử dụng chỉ mục tốt hơn –

Các vấn đề liên quan