ใช้ createIndex() (แทน ensureIndex) ร่วมกับ dot notation เพื่อสร้างดัชนีบนฟิลด์ภายใน embedded document สร้างคอลเลกชันและดัชนี:
> db.demo323.insertOne({"details":{"Name":"Chris","Age":34}});
{ "acknowledged" : true, "insertedId" : ObjectId("5e51157af8647eb59e56206e") }
> db.demo323.insertOne({"details":{"Name":"David","Age":31}});
{ "acknowledged" : true, "insertedId" : ObjectId("5e511581f8647eb59e56206f") }
> db.demo323.insertOne({"details":{"Name":"Bob","Age":28}});
{ "acknowledged" : true, "insertedId" : ObjectId("5e511589f8647eb59e562070") }
> db.demo323.createIndex({"details.Name":1});
{ "createdCollectionAutomatically" : false, "numIndexesBefore" : 2, "numIndexesAfter" : 3, "ok" : 1 }
แสดงข้อมูล:
> db.demo323.find();
ค้นหาด้วยฟิลด์ที่มีดัชนี:
> db.demo323.find({"details.Name":"Bob"});
ผลลัพธ์:
{ "_id" : ObjectId("5e511589f8647eb59e562070"), "details" : { "Name" : "Bob", "Age" : 28 } }
ข้อมูลเพิ่มเติม
- Dot notation ใน createIndex():
"parentField.childField": 1 - ดัชนีนี้เรียกว่า index on embedded field
- รองรับ compound index:
{"details.Name": 1, "details.Age": -1} - ใช้
db.demo323.getIndexes()ดูดัชนีทั้งหมด - ใช้
db.demo323.explain().find({"details.Name":"Bob"})ตรวจสอบว่าใช้ดัชนีจริง