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

บังคับให้ MongoDB ใช้ BasicCursor แทน Index ด้วย hint()

ใช้ hint() ระบุ {$natural: 1} เพื่อบังคับให้ MongoDB ทำ Full Collection Scan (BasicCursor) แทนที่จะใช้ดัชนี

สร้างดัชนีและข้อมูลทดสอบ

> db.demo31.createIndex({"StudentFirstName":1});
> db.demo31.insertOne({"StudentFirstName":"John"});
> db.demo31.insertOne({"StudentFirstName":"Jace"});
> db.demo31.insertOne({"StudentFirstName":"Chris"});
> db.demo31.insertOne({"StudentFirstName":"James"});

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

> db.demo31.find();
{
    "_id" : ObjectId("5e174f8fcfb11e5c34d898c1"), "StudentFirstName" : "John"
}
{
    "_id" : ObjectId("5e174f97cfb11e5c34d898c2"), "StudentFirstName" : "Jace"
}
{
    "_id" : ObjectId("5e174f9ccfb11e5c34d898c3"), "StudentFirstName" : "Chris"
}
{
    "_id" : ObjectId("5e174fa0cfb11e5c34d898c4"), "StudentFirstName" : "James"
}

คิวรี่บังคับใช้ BasicCursor

> db.demo31.find({"StudentFirstName": {$regex: '^Ja'}}).hint({$natural: 1});

ผลลัพธ์ (ค้นหาชื่อขึ้นต้น Ja)

{
    "_id" : ObjectId("5e174f97cfb11e5c34d898c2"), "StudentFirstName" : "Jace"
}
{
    "_id" : ObjectId("5e174fa0cfb11e5c34d898c4"), "StudentFirstName" : "James"
}

เมื่อใดควรใช้: ทดสอบประสิทธิภาพ (explain plan), ข้อมูลน้อยมาก, หรือดัชนีไม่ช่วยได้ (เช่น regex นำหน้าไม่คงที่)