Una query come {"colors.*.prestock" : {$gte:30}}
non è possibile secondo SERVER-267
, e dubito che questo sarà supportato nei prossimi anni.
La soluzione migliore è cambiare lo schema in un array:
colors: [
{ "color" : "Green", "instock" : 50, ... },
{ "color" : "Yellow", "instock" : 50, ... },
]
Quindi puoi interrogare
db.foo.find( {"colors.prestock" : {$gte:30}} )
Nota che questo restituirà l'intero oggetto, inclusi tutti i colori, cioè anche quelli per i quali il vincolo della query non è valido. Questo potrebbe essere risolto usando il framework di aggregazione, ma ancora, usando solo $unwind
che richiede anche colors
essere un array.