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

นับจำนวน Tag ใน MongoDB ตามรายชื่อที่กำหนดด้วย $in

บทความนี้สาธิตการใช้ $in เพื่อค้นหาเอกสารที่ Array Field ListOfNames มีชื่อที่อยู่ในรายการที่กำหนด (John และ Carol) ซึ่งเป็นการ "นับ Tag" แบบง่ายๆ

สร้างข้อมูลตัวอย่าง

> db.tagCountDemo.insertOne({"ListOfNames":["John","Sam","Carol"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd64b387924bb85b3f48944") }
> db.tagCountDemo.insertOne({"ListOfNames":["Bob","David","John"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd64b4b7924bb85b3f48945") }
> db.tagCountDemo.insertOne({"ListOfNames":["Mike","Robert","Chris"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd64b5d7924bb85b3f48946") }
> db.tagCountDemo.insertOne({"ListOfNames":["James","Carol","Jace"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd64b717924bb85b3f48947") }

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

> db.tagCountDemo.find().pretty();
{
  "_id" : ObjectId("5cd64b387924bb85b3f48944"),
  "ListOfNames" : [ "John", "Sam", "Carol" ]
}
{
  "_id" : ObjectId("5cd64b4b7924bb85b3f48945"),
  "ListOfNames" : [ "Bob", "David", "John" ]
}
{
  "_id" : ObjectId("5cd64b5d7924bb85b3f48946"),
  "ListOfNames" : [ "Mike", "Robert", "Chris" ]
}
{
  "_id" : ObjectId("5cd64b717924bb85b3f48947"),
  "ListOfNames" : [ "James", "Carol", "Jace" ]
}

ค้นหาเอกสารที่มี "John" หรือ "Carol" ใน ListOfNames

> db.tagCountDemo.find({"ListOfNames":{$in:['John','Carol']}});

ผลลัพธ์ (พบ 3 Document)

{
  "_id" : ObjectId("5cd64b387924bb85b3f48944"),
  "ListOfNames" : [ "John", "Sam", "Carol" ]
}
{
  "_id" : ObjectId("5cd64b4b7924bb85b3f48945"),
  "ListOfNames" : [ "Bob", "David", "John" ]
}
{
  "_id" : ObjectId("5cd64b717924bb85b3f48947"),
  "ListOfNames" : [ "James", "Carol", "Jace" ]
}

นับจำนวนเอกสารที่ตรงเงื่อนไข

> db.tagCountDemo.find({"ListOfNames":{$in:['John','Carol']}}).count();

ผลลัพธ์: 3

ขยายความเป็น "Tag Count" จริง (นับความถี่แต่ละ Tag)

หากต้องการนับว่าแต่ละชื่อปรากฏกี่ครั้ง ใช้ Aggregation:

db.tagCountDemo.aggregate([
  { $unwind: "$ListOfNames" },
  { $match: { ListOfNames: { $in: ["John", "Carol"] } } },
  { $group: { _id: "$ListOfNames", count: { $sum: 1 } } },
  { $sort: { count: -1 } }
]);
{ "_id" : "John", "count" : 2 }
{ "_id" : "Carol", "count" : 2 }

สรุป

  • $in เหมาะสำหรับ Filter: "มีค่าใดค่าหนึ่งในรายการ"
  • นับจำนวน Document: ใช้ .count() หลัง find()
  • นับความถี่แต่ละค่า: ใช้ $unwind + $group + $sum