Uma consulta como
{"colors.*.prestock" : {$gte:30}}
não é possível de acordo com SERVER-267
, e duvido que isso seja apoiado nos próximos anos. Sua melhor aposta é alterar o esquema para uma matriz:
colors: [
{ "color" : "Green", "instock" : 50, ... },
{ "color" : "Yellow", "instock" : 50, ... },
]
Então você pode consultar
db.foo.find( {"colors.prestock" : {$gte:30}} )
Observe que isso retornará o objeto inteiro, incluindo todas as cores, ou seja, também aquelas para as quais a restrição de consulta não é válida. Isso pode ser resolvido usando a estrutura de agregação, mas, novamente, apenas usando
$unwind
que também requer colors
ser uma matriz.