Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

คิวรี MongoDB สำหรับการจัดอันดับ (Ranking) และนับจำนวนค้นหา


สร้างคอลเลกชันตัวอย่าง

สร้างคอลเลกชัน demo120 พร้อมข้อมูลนักเรียนและวิชาที่เรียน:

> db.demo120.insertOne(
  { 'Name': 'Chris', 'Subjects': ['MySQL', 'MongoDB', 'Java', 'Python'] }
);
{ "acknowledged": true, "insertedId": ObjectId("5e2f11aed8f64a552dae6365") }
> db.demo120.insertOne(
  { 'Name': 'Bob', 'Subjects': ['C', 'MongoDB'] }
);
{ "acknowledged": true, "insertedId": ObjectId("5e2f11afd8f64a552dae6366") }

แสดงข้อมูลทั้งหมด

> db.demo120.find();
{ "_id": ObjectId("5e2f11aed8f64a552dae6365"), "Name": "Chris", "Subjects": ["MySQL", "MongoDB", "Java", "Python"] }
{ "_id": ObjectId("5e2f11afd8f64a552dae6366"), "Name": "Bob", "Subjects": ["C", "MongoDB"] }

คิวรี Aggregate สำหรับคำนวณ RankSearch

ใช้ $setIntersection หาวิชาที่ตรงกัน แล้วหารด้วยจำนวนวิชาทั้งหมดของนักเรียน และเรียงลำดับจากมากไปน้อย:

> var s = ['MySQL', 'Java', 'MongoDB'];
> db.demo120.aggregate([
  { "$match": { "Subjects": { "$in": s } } },
  {
    "$addFields": {
      "RankSearch": {
        "$divide": [
          { "$size": { "$setIntersection": ["$Subjects", s] } },
          { "$size": "$Subjects" }
        ]
      }
    }
  },
  { "$sort": { "RankSearch": -1 } }
])

ผลลัพธ์

{ "_id": ObjectId("5e2f11aed8f64a552dae6365"), "Name": "Chris", "Subjects": ["MySQL", "MongoDB", "Java", "Python"], "RankSearch": 0.75 }
{ "_id": ObjectId("5e2f11afd8f64a552dae6366"), "Name": "Bob", "Subjects": ["C", "MongoDB"], "RankSearch": 0.5 }