Sử dụng đường dẫn tổng hợp sau:
db.click_log.aggregate([
{ "$match" : { "log.type" : { "$ne" : "emailed" } } }, // get rid of docs with an "emailed" value in log.type and docs not from this month
{ "$unwind" : "$log" }, // unwind to get log elements as separate docs
{ "$project" : { "_id" : 1, "log" : 1, "month" : { "$month" : "$log.utc_timestamp" } } },
{ "$match" : { "log" : "clicked", "month" : <# of month> } }, // get rid of log elements not from this month and that aren't type clicked
{ "$group" : { "_id" : "$_id", "count" : { "$sum" : 1 } } } // collect clicked elements from same original doc and count number
])
Điều này sẽ trả về, đối với mỗi tài liệu không có "được gửi qua email" dưới dạng giá trị của log.type
, số lượng các phần tử của mảng log
có log.type
giá trị clicked
và với dấu thời gian của tháng hiện tại. Nếu bạn muốn khoảng thời gian trượt 30 ngày trong tháng, hãy thay đổi $match
là một truy vấn phạm vi với $gt
và $lt
bao gồm khoảng thời gian mong muốn.