Tôi cần một thứ hơi phức tạp hơn các ví dụ trong tài liệu MongoDB và dường như tôi không thể quấn đầu quanh nó.Sử dụng bản đồ/giảm của MongoDB để "nhóm theo" hai trường
Nói rằng tôi có một bộ sưu tập của các đối tượng có dạng {date: "2010-10-10", type: "EVENT_TYPE_1", user_id: 123, ...}
Bây giờ tôi muốn để có được một cái gì đó tương tự như một GROUP SQL THEO truy vấn, nhóm trên cả ngày và loại. Đó là, tôi muốn số lượng sự kiện của từng loại trong mỗi ngày. Ngoài ra, tôi muốn làm cho nó độc đáo bởi user_id, tức là. nếu người dùng có nhiều sự kiện hơn trong cùng một ngày, hãy đếm nó chỉ một lần.
Tôi đang cố gắng thực hiện việc này với bản đồ/giảm.
tôi làm
db.logs.mapReduce(
function() {
emit(this.type, 1);
},
function(k, vals) {
var total = 0;
for (var i = 0; i < vals.length; i++)
total += vals[i];
return total;
}
)
mà độc đáo nhóm theo loại, nhưng bây giờ, làm thế nào tôi có thể nhóm theo ngày cùng một lúc? Có vẻ như chìa khóa trong emit() không thể là một mảng (tôi nghĩ về việc làm emit([this.date, this.type], 1)
). Ngoài ra, làm thế nào tôi có thể đảm bảo tính độc đáo của mỗi người dùng?
Tôi mới bắt đầu với MongoDB và tôi vẫn gặp sự cố khi nắm bắt các khái niệm cơ bản. Ngoài ra, không có nhiều tài liệu có sẵn trên mạng. Bất kỳ sự trợ giúp nào từ những người dùng có kinh nghiệm đều được đánh giá cao. Cảm ơn!
couchdb có thể làm mảng làm khóa, chỉ cần nói ' – dominic