Ja, det er muligt at bruge Aggregation Framework.
Antagelser
- Datasættet, der bruges her, er det samme, som bruges i Hent dokumenter med tags på listen, sorteret efter det samlede antal match
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
}