Có, có thể sử dụng Khung tổng hợp.
Giả định
- Tập dữ liệu được sử dụng ở đây giống tập dữ liệu được sử dụng trong Lấy tài liệu có thẻ trong danh sách, được sắp xếp theo tổng số kết quả phù hợp
-
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
}