Bạn có thể sử dụng aggregation framework:
> db.prabir.aggregate(
{ $unwind : "$comments" },
{ $group: {
_id: '',
count: { $sum: 1 }
}
})
{ "result" : [ { "_id" : "", "count" : 8 } ], "ok" : 1 }
Tóm lại này (tạm thời) tạo ra một tài liệu riêng biệt cho mỗi bình luận và sau đó tăng count
cho mỗi tài liệu.
Đối với số lượng lớn bài đăng và nhận xét,
có thể sẽ hiệu quả hơn để theo dõi số lượng nhận xét. Khi một bình luận được thêm vào, bạn cũng tăng một bộ đếm. Ví dụ:
// Insert a comment
> comment = { name: 'JohnDoe', comment: 'FooBar' }
> db.prabir.update(
{ post: "A" },
{
$push: { comments: comment },
$inc: { numComments: 1 }
}
)
Sử dụng khuôn khổ hợp một lần nữa:
> db.prabir.aggregate(
{ $project : { _id: 0, numComments: 1 }},
{ $group: {
_id: '',
count: { $sum: "$numComments" }
}
})
{ "result" : [ { "_id" : "", "count" : 8 } ], "ok" : 1 }
Nguồn
2013-02-03 03:15:19
Tôi mới đến MongoDB. Mã đó để có được một số đơn giản ... thật khủng khiếp. – otocan