Eine Abfrage wie {"colors.*.prestock" : {$gte:30}}
ist laut SERVER-267
nicht möglich , und ich bezweifle, dass dies in den nächsten Jahren unterstützt wird.
Am besten ändern Sie das Schema in ein Array:
colors: [
{ "color" : "Green", "instock" : 50, ... },
{ "color" : "Yellow", "instock" : 50, ... },
]
Dann können Sie abfragen
db.foo.find( {"colors.prestock" : {$gte:30}} )
Beachten Sie, dass dies das gesamte Objekt einschließlich aller Farben zurückgibt, d. h. auch diejenigen, für die die Abfragebeschränkung nicht gilt. Dies könnte mit dem Aggregations-Framework gelöst werden, aber wiederum nur mit $unwind
was auch colors
erfordert ein Array sein.