Tạo index trên trường mảng, dùng explain() để phân tích execution plan và xác nhận dùng index (IXSCAN).
Tạo collection demo278, index trên Subjects, insert dữ liệu:
> db.demo278.ensureIndex({"Subjects":1});
> db.demo278.insertOne({"Subjects":["MySQL","MongoDB","Java"]});
> db.demo278.insertOne({"Subjects":["C","C++"]});
> db.demo278.insertOne({"Subjects":["Spring","Hibernate"]});
Kiểm tra performance truy vấn $in trên Subjects:
> db.demo278.find({Subjects:{$in:["Spring","MongoDB"]}}).explain();
Kết quả explain cho thấy winningPlan dùng IXSCAN trên index "Subjects_1", isMultiKey=true:
{
"queryPlanner": {
"winningPlan": {
"stage": "FETCH",
"inputStage": {
"stage": "IXSCAN",
"keyPattern": {"Subjects":1},
"indexName": "Subjects_1",
"isMultiKey": true,
...
}
}
},
"ok": 1
}
Kết luận: Multi-key index trên mảng cho phép truy vấn $in hiệu quả trên dataset lớn.