U kunt dit doen in mongoDB met behulp van Aggregation Framework (nieuw in versie 2.2).
U moet de reeks gebruikersgemeenschappen beschikbaar hebben. In dit voorbeeld noem ik het userComms - ik verwacht dat het een array is met hetzelfde type waarden als posts.communities.
db.posts.aggregate( [
{
"$unwind" : "$communities"
},
{
"$match" : {
"communities" : {
"$in" : userComms
}
}
},
{
"$group" : {
"_id" : "$_id",
"relevance" : {
"$sum" : 1
}
}
},
{
"$sort" : {
"relevance" : -1
}
}
]);
Dit retourneert een document van het formulier:
{
"result" : [
{
"_id" : 1,
"relevance" : 4
},
{
"_id" : 6,
"relevance" : 3
},
...
]
}
De resultatenarray bevat _id's van berichten en is relevant zoals berekend door het aantal community's toe te voegen dat ze gemeen hadden met de gebruiker. Dan wordt het gesorteerd (aflopend) op die som.