Wie ich in In MongoDB geantwortet habe, suche in einem Array und sortiere nach Anzahl der Übereinstimmungen
Es ist mit Aggregation Framework möglich.
Annahmen
tags
Attribut ist eine Menge (keine wiederholten Elemente)
Abfrage
Dieser Ansatz zwingt Sie, die Ergebnisse abzuwickeln und das Übereinstimmungsprädikat mit abgewickelten Ergebnissen neu zu bewerten, also ist es wirklich ineffizient.
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}}
);
Erwartete Ergebnisse
{
"result" : [
{
"_id" : {
"_id" : ObjectId("5051f1786a64bd2c54918b26")
},
"matches" : 3
},
{
"_id" : {
"_id" : ObjectId("5051f1726a64bd2c54918b24")
},
"matches" : 2
},
{
"_id" : {
"_id" : ObjectId("5051f1756a64bd2c54918b25")
},
"matches" : 1
}
],
"ok" : 1
}