Tính độ tương đồng giữa mảng document với mảng tham chiếu, sắp xếp giảm dần theo phần trăm khớp.
Tạo collection demo123:
> db.demo123.insertOne({"ListOfSubject":['MySQL','MongoDB','Java']});
> db.demo123.insertOne({"ListOfSubject":['Python','MongoDB','C']});
> db.demo123.insertOne({"ListOfSubject":['MySQL','MongoDB','C++']});
Pipeline: unwind mảng, match với $in, group đếm số phần tử khớp, tính percentage, sort:
> var subjects = ['MySQL','MongoDB','Java'];
> db.demo123.aggregate([
{$unwind: "$ListOfSubject"},
{$match: {ListOfSubject: {$in: subjects}}},
{$group: {_id: "$_id", number: {$sum: 1}}},
{$project: {_id: 1, number: 1, percentage: {$divide: ["$number", subjects.length]}}},
{$sort: {percentage: -1}}
]);
Kết quả: 3/3=100%, 2/3=66.7%, 1/3=33.3%:
{
"_id" : ObjectId("5e2f24ac140daf4c2a3544b8"),
"number" : 3,
"percentage" : 1
}
{
"_id" : ObjectId("5e2f24ce140daf4c2a3544ba"),
"number" : 2,
"percentage" : 0.6666666666666666
}
{
"_id" : ObjectId("5e2f24cd140daf4c2a3544b9"),
"number" : 1,
"percentage" : 0.3333333333333333
}