Une requête du type {"colors.*.prestock" : {$gte:30}}
n'est pas possible selon SERVER-267
, et je doute que cela soit pris en charge dans les prochaines années.
Votre meilleur pari est de changer le schéma en tableau :
colors: [
{ "color" : "Green", "instock" : 50, ... },
{ "color" : "Yellow", "instock" : 50, ... },
]
Ensuite, vous pouvez interroger
db.foo.find( {"colors.prestock" : {$gte:30}} )
Notez que cela renverra l'objet entier, y compris toutes les couleurs, c'est-à-dire également celles pour lesquelles la contrainte de requête ne tient pas. Cela pourrait être résolu en utilisant le cadre d'agrégation, mais encore une fois, en utilisant uniquement $unwind
qui nécessite également des colors
être un tableau.