Tôi không chắc bạn sẽ có thể giải quyết vấn đề này một cách tinh vi với giản đồ hiện tại của bạn; slotTypes
phải là một mảng tài liệu con, sẽ cho phép $elemMatch
của bạn truy vấn để làm việc. Hiện tại, nó là một đối tượng có các phím số.
Đó là, lược đồ tài liệu của bạn phải giống như sau:
{
"assetsId": {
"0": "546cf2f8585ffa451bb68369"
},
"slotTypes": [
{ "usage": "json" },
{ "usage": "image" }
]
}
Nếu thay đổi bố cục dữ liệu không phải là một tùy chọn, thì về cơ bản bạn sẽ cần phải quét qua mọi tài liệu để tìm các kết quả phù hợp với $where
. Điều này chậm, không thể lập chỉ mục và khó xử lý.
db.objects.find({$where: function() {
for(var key in this.slotTypes) {
if (this.slotTypes[key].usage == "json") return true;
}
return false;
}})
Bạn nên đọc tài liệu về $ where để đảm bảo rằng bạn hiểu những cảnh báo của nó, và vì tình yêu của tất cả những gì thánh thiện, hãy làm sạch đầu vào của bạn cho chức năng; đây là mã trực tiếp đang thực thi trong ngữ cảnh cơ sở dữ liệu của bạn.