Zoals ik antwoordde in In MongoDB zoek in een array en sorteer op aantal overeenkomsten
Het is mogelijk met behulp van Aggregation Framework.
Aannames
tags
attribuut is een set (geen herhaalde elementen)
Zoekopdracht
Deze aanpak dwingt je om de resultaten af te wikkelen en het wedstrijdpredikaat opnieuw te evalueren met afgewikkelde resultaten, dus het is echt inefficiënt.
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}}
);
Verwachte resultaten
{
"result" : [
{
"_id" : {
"_id" : ObjectId("5051f1786a64bd2c54918b26")
},
"matches" : 3
},
{
"_id" : {
"_id" : ObjectId("5051f1726a64bd2c54918b24")
},
"matches" : 2
},
{
"_id" : {
"_id" : ObjectId("5051f1756a64bd2c54918b25")
},
"matches" : 1
}
],
"ok" : 1
}