Bạn có thể thực hiện việc này trong mongoDB bằng cách sử dụng Khung tổng hợp (mới trong phiên bản 2.2).
Bạn phải có sẵn một loạt các cộng đồng Người dùng. Tôi sẽ gọi nó là userComms trong ví dụ này - Tôi mong đợi nó là một mảng có cùng loại giá trị với posts.communities.
db.posts.aggregate( [
{
"$unwind" : "$communities"
},
{
"$match" : {
"communities" : {
"$in" : userComms
}
}
},
{
"$group" : {
"_id" : "$_id",
"relevance" : {
"$sum" : 1
}
}
},
{
"$sort" : {
"relevance" : -1
}
}
]);
Thao tác này trả về một tài liệu có dạng:
{
"result" : [
{
"_id" : 1,
"relevance" : 4
},
{
"_id" : 6,
"relevance" : 3
},
...
]
}
Mảng kết quả chứa _id các bài đăng và có liên quan như được tính toán bằng cách thêm số lượng cộng đồng mà họ có chung với người dùng. Sau đó, nó được sắp xếp (giảm dần) theo tổng đó.