Som jeg svarede i In MongoDB søg i en matrix og sorter efter antal match
Det er muligt at bruge Aggregation Framework.
Antagelser
tags
attribut er et sæt (ingen gentagne elementer)
Forespørgsel
Denne tilgang tvinger dig til at afvikle resultaterne og revurdere kampprædikatet med afviklede resultater, så det er virkelig 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}}
);
Forventede resultater
{
"result" : [
{
"_id" : {
"_id" : ObjectId("5051f1786a64bd2c54918b26")
},
"matches" : 3
},
{
"_id" : {
"_id" : ObjectId("5051f1726a64bd2c54918b24")
},
"matches" : 2
},
{
"_id" : {
"_id" : ObjectId("5051f1756a64bd2c54918b25")
},
"matches" : 1
}
],
"ok" : 1
}