Som jag svarade i In MongoDB sök i en array och sortera efter antal matchningar
Det är möjligt att använda Aggregation Framework.
Antaganden
tags
attribut är en uppsättning (inga upprepade element)
Fråga
Detta tillvägagångssätt tvingar dig att varva ner resultaten och omvärdera matchpredikatet med oavbrutna resultat, så det är verkligen ineffektivt.
db.test_col.aggregate(
{$match: {tags: {$in: ["shirt","cotton","black"]}}},
{$unwind: "$tags"},
{$match: {tags: {$in: ["shirt","cotton","black"]}}},
{$group: {
_id:{"_id":1},
matches:{$sum:1}
}},
{$sort:{matches:-1}}
);
Förväntade resultat
{
"result" : [
{
"_id" : {
"_id" : ObjectId("5051f1786a64bd2c54918b26")
},
"matches" : 3
},
{
"_id" : {
"_id" : ObjectId("5051f1726a64bd2c54918b24")
},
"matches" : 2
},
{
"_id" : {
"_id" : ObjectId("5051f1756a64bd2c54918b25")
},
"matches" : 1
}
],
"ok" : 1
}