Một phương pháp khác, hiệu quả hơn, sẽ là triển khai tài liệu con "trạng thái" của bạn dưới dạng một mảng "giá trị đã nhập", như sau:
{"_id" : ObjectId("51385d2308d427ce306f0100"),
"aid" : "1",
"studyId" : "study-1",
"mediaType" : "microBlog",
"text" : "bla bla",
"sentences" : "bla bla",
"status" : [
{ type: "algo1", value: "required" },
{ type: "algo2", value: "required" },
{ type: "algo3", value: "completed" },
{ type: "algo4", value: "completed" }
],
"priority" : "u"}
Điều này sẽ cho phép bạn tìm thấy tất cả các tài liệu mà bất kỳ trường con nào có giá trị "bắt buộc", với truy vấn này:
db.foo.find({"status.value":"required"})
Việc xác định chỉ mục trên trường con này sẽ tăng tốc truy vấn:
db.foo.ensureIndex({"status.value":1})