これは、集約フレームワーク を使用してmongoDBで実行できます。 (バージョン2.2の新機能)。
一連のユーザーのコミュニティを利用できるようにする必要があります。この例では、これをuserCommsと呼びます。posts.communitiesと同じタイプの値を持つ配列であると期待しています。
db.posts.aggregate( [
{
"$unwind" : "$communities"
},
{
"$match" : {
"communities" : {
"$in" : userComms
}
}
},
{
"$group" : {
"_id" : "$_id",
"relevance" : {
"$sum" : 1
}
}
},
{
"$sort" : {
"relevance" : -1
}
}
]);
これにより、次の形式のドキュメントが返されます:
{
"result" : [
{
"_id" : 1,
"relevance" : 4
},
{
"_id" : 6,
"relevance" : 3
},
...
]
}
結果の配列には、投稿の_idが含まれ、ユーザーと共通のコミュニティの数を加算して計算された関連性があります。次に、その合計で並べ替え(降順)します。