ฉันต้องการเลือกเอกสารแบบสุ่มหนึ่งฉบับจากคอลเล็กชัน MongoDB หากฉันใช้ MySQL โซลูชันของฉันจะคล้ายกับสิ่งนี้ ก>.
ฉันจะเลือกเอกสารสุ่มจาก MongoDB Collection โดยใช้ตัวสร้างคิวรี Doctrine ODM ได้อย่างไร
ฉันต้องการเลือกเอกสารแบบสุ่มหนึ่งฉบับจากคอลเล็กชัน MongoDB หากฉันใช้ MySQL โซลูชันของฉันจะคล้ายกับสิ่งนี้ ก>.
ฉันจะเลือกเอกสารสุ่มจาก MongoDB Collection โดยใช้ตัวสร้างคิวรี Doctrine ODM ได้อย่างไร
ฉันแก้ไขปัญหาด้วยวิธีนี้:
public function getRandomUser()
{
$qb = $this->getDocumentManager()->createQueryBuilder('AppBundle:User');
$count = $qb->getQuery()->count();
$skip_count = random_int(0, $count);
$qb->skip($skip_count);
return $qb->getQuery()->getSingleResult();
}
เนื่องจากเซิร์ฟเวอร์ Mongo ของคุณเป็นเวอร์ชัน 3.2 หรือใหม่กว่า คุณสามารถใช้คำสั่ง $sample aggregation ได้:
$ab = $this->dm->createAggregationBuilder(User::class);
$ab->sample($count);
return $ab->hydrate(User::class)->execute();
โปรดทราบว่าชุดผลลัพธ์สามารถมีองค์ประกอบที่ไม่ซ้ำได้ โปรดอ่านเพิ่มเติมเกี่ยวกับ $sample https://docs.mongodb.com/manual/reference/operator/aggregation/sample/#behavior
สำหรับเซิร์ฟเวอร์ Mongo เก่า คุณควรตั้งค่าสุ่มให้กับทุกเอกสารเมื่อคงอยู่ และใช้แบบสอบถาม $lt-$gt เพื่อดึงชุดสุ่ม โปรดดูที่ บันทึกแบบสุ่มจาก MongoDB
ลองใช้วิธีแก้ปัญหานี้:
public function getRandomDocument()
{
$qb = $this->getDocumentManager()->createQueryBuilder('YourBundle:TargetDocument');
$count = $qb->getQuery()->count();
$skip_count = random_int(0, $count);
$qb->skip($skip_count);
return $qb->getQuery()->getSingleResult();
}