Khi schema subdocument động (không biết tên trường), dùng pattern key-value (properties.k, properties.v) và index trên hai trường này.
Tạo collection demo274 với mảng details chứa object schema động:
> db.demo274.insertOne({
"details": [
{"StudentFirstName":"Chris","StudentLastName":"Brown"},
{"StudentFirstName":"David","StudentLastName":"Miller"},
{"StudentFirstName":"John","StudentLastName":"Smith"},
{"StudentFirstName":"John","StudentLastName":"Doe"}
]
});
Tạo compound index trên details.StudentFirstName và details.StudentLastName:
> db.demo274.ensureIndex({"details.StudentFirstName":1,"details.StudentLastName":1});
Kết quả tạo index thành công:
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
Mẹo: Với schema hoàn toàn động, hãy lưu dưới dạng mảng cặp key-value: {k:"fieldName", v:"value"} và index trên details.k, details.v.