Ja, het is mogelijk met behulp van Aggregation Framework.
Aannames
- De dataset die hier wordt gebruikt, is dezelfde die wordt gebruikt in Documenten ophalen met tags in lijst, gerangschikt op totaal aantal overeenkomsten
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
}