Du kan gøre dette i mongoDB ved hjælp af Aggregation Framework (nyt i version 2.2).
Du skal have rækken af brugernes fællesskaber til rådighed. Jeg vil kalde det userComms i dette eksempel - jeg forventer, at det er et array med samme type værdier, som posts.communities er.
db.posts.aggregate( [
{
"$unwind" : "$communities"
},
{
"$match" : {
"communities" : {
"$in" : userComms
}
}
},
{
"$group" : {
"_id" : "$_id",
"relevance" : {
"$sum" : 1
}
}
},
{
"$sort" : {
"relevance" : -1
}
}
]);
Dette returnerer et dokument af formen:
{
"result" : [
{
"_id" : 1,
"relevance" : 4
},
{
"_id" : 6,
"relevance" : 3
},
...
]
}
Resultatarrayet indeholder _id'er af indlæg og relevante som beregnet ved at tilføje antallet af fællesskaber, de havde til fælles med brugeren. Så er det sorteret (faldende) efter den sum.