Một truy vấn như {"colors.*.prestock" : {$gte:30}}
không thể theo SERVER-267
và tôi nghi ngờ điều này sẽ được hỗ trợ trong những năm tới.
Đặt cược tốt nhất của bạn là thay đổi lược đồ thành một mảng:
colors: [
{ "color" : "Green", "instock" : 50, ... },
{ "color" : "Yellow", "instock" : 50, ... },
]
Sau đó, bạn có thể truy vấn
db.foo.find( {"colors.prestock" : {$gte:30}} )
Lưu ý rằng điều này sẽ trả về toàn bộ đối tượng, bao gồm tất cả các màu, tức là cả những màu mà ràng buộc truy vấn không giữ. Điều này có thể được giải quyết bằng cách sử dụng khung tổng hợp, nhưng một lần nữa, chỉ sử dụng $unwind
cũng yêu cầu colors
trở thành một mảng.