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

การดึงค่า _id เป็นอาร์เรย์สำหรับเอกสารที่มีค่ามากกว่า 50 ใน MongoDB

ใช้ distinct() และ $in เพื่อดึง _id เป็นอาร์เรย์แทน JSON Array

เมื่อต้องการได้ผลลัพธ์เป็นอาร์เรย์ของค่า _id (แทนที่จะเป็น JSON array ของเอกสารเต็ม) สำหรับเอกสารที่มีค่ามากกว่า 50 สามารถใช้ distinct() ร่วมกับ $gt และ $in ได้

ตัวอย่างข้อมูลทดสอบ

> db.demo50.save({ "Value": 40 });
> db.demo50.save({ "Value": 100 });
> db.demo50.save({ "Value": 20 });
> db.demo50.save({ "Value": 510 });

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

> db.demo50.find();

ผลลัพธ์:

{ "_id": ObjectId("..."), "Value": 40 }
{ "_id": ObjectId("..."), "Value": 100 }
{ "_id": ObjectId("..."), "Value": 20 }
{ "_id": ObjectId("..."), "Value": 510 }

คำสั่งดึง _id ของเอกสารที่ Value > 50

> listOfValues = db.demo50.distinct("_id", { Value: { $gt: 50 } });
> db.demo50.find({ _id: { $in: listOfValues } });

ผลลัพธ์ที่ได้

{ "_id": ObjectId("..."), "Value": 100 }
{ "_id": ObjectId("..."), "Value": 510 }

คำอธิบาย

  1. distinct("_id", { Value: { $gt: 50 } }): ดึงเฉพาะค่า _id ที่ไม่ซ้ำกันของเอกสารที่ Value > 50
  2. $in: ใช้ค่า _id ที่ได้มาเป็นเงื่อนไขค้นหาเอกสารเต็ม

หมายเหตุ: ใน MongoDB ใหม่ๆ สามารถใช้ projection ใน find() ได้โดยตรง:

> db.demo50.find({ Value: { $gt: 50 } }, { _id: 1, Value: 1 });

ซึ่งจะคืนเอกสารที่มีเฉพาะ _id และ Value โดยไม่ต้องทำ 2 ขั้นตอน