En forespørgsel som {"colors.*.prestock" : {$gte:30}}
er ikke muligt ifølge SERVER-267
, og jeg tvivler på, at dette vil blive understøttet i de næste år.
Dit bedste bud er at ændre skemaet til et array:
colors: [
{ "color" : "Green", "instock" : 50, ... },
{ "color" : "Yellow", "instock" : 50, ... },
]
Så kan du forespørge
db.foo.find( {"colors.prestock" : {$gte:30}} )
Bemærk, at dette vil returnere hele objektet, inklusive alle farver, dvs. også dem, for hvilke forespørgselsbegrænsningen ikke gælder. Dette kunne løses ved hjælp af aggregeringsrammerne, men igen, kun ved hjælp af $unwind
som også kræver colors
at være en matrix.