Ya, itu mungkin menggunakan Kerangka Agregasi.
Asumsi
- Dataset yang digunakan di sini sama dengan yang digunakan dalam Dapatkan dokumen dengan tag dalam daftar, diurutkan berdasarkan jumlah kecocokan
tags
atribut adalah himpunan (tidak ada elemen berulang)
Kueri
Pendekatan ini memaksa Anda untuk melepaskan hasil dan mengevaluasi kembali predikat kecocokan dengan hasil yang tidak ditentukan, sehingga benar-benar tidak efisien.
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}}
);
Hasil yang Diharapkan
{
"result" : [
{
"_id" : {
"_id" : ObjectId("5051f1786a64bd2c54918b26")
},
"matches" : 3
},
{
"_id" : {
"_id" : ObjectId("5051f1726a64bd2c54918b24")
},
"matches" : 2
},
{
"_id" : {
"_id" : ObjectId("5051f1756a64bd2c54918b25")
},
"matches" : 1
}
],
"ok" : 1
}