Заявка като {"colors.*.prestock" : {$gte:30}}
не е възможно според SERVER-267
и се съмнявам, че това ще се поддържа през следващите години.
Най-добре е да промените схемата на масив:
colors: [
{ "color" : "Green", "instock" : 50, ... },
{ "color" : "Yellow", "instock" : 50, ... },
]
След това можете да направите заявка
db.foo.find( {"colors.prestock" : {$gte:30}} )
Имайте предвид, че това ще върне целия обект, включително всички цветове, т.е. също и тези, за които ограничението на заявката не е валидно. Това може да бъде разрешено с помощта на рамката за агрегиране, но отново, само с помощта на $unwind
което също изисква colors
да бъде масив.