Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Tìm document mảng tương tự và sắp xếp theo độ tương đồng MongoDB

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
}