Như tôi đã trả lời trong Tìm kiếm trong MongoDB trong một mảng và sắp xếp theo số lượng kết quả phù hợp
Có thể sử dụng Khung tổng hợp.
Giả định
-
tags
thuộc tính là một tập hợp (không có phần tử lặp lại)
Truy vấn
Cách tiếp cận này buộc bạn phải hủy bỏ các kết quả và đánh giá lại vị từ đối sánh với các kết quả chưa được tua, vì vậy nó thực sự không hiệu quả.
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}}
);
Kết quả mong đợi
{
"result" : [
{
"_id" : {
"_id" : ObjectId("5051f1786a64bd2c54918b26")
},
"matches" : 3
},
{
"_id" : {
"_id" : ObjectId("5051f1726a64bd2c54918b24")
},
"matches" : 2
},
{
"_id" : {
"_id" : ObjectId("5051f1756a64bd2c54918b25")
},
"matches" : 1
}
],
"ok" : 1
}