Ja, det är möjligt att använda Aggregation Framework.
Antaganden
- Datauppsättningen som används här är densamma som används i Hämta dokument med taggar i listan, sorterade efter totalt antal matchningar
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
}