{"colors.*.prestock" : {$gte:30}}
のようなクエリ SERVER-267
によると、これは不可能です。 、そしてこれが今後数年間でサポートされるとは思えません。
最善の策は、スキーマを配列に変更することです。
colors: [
{ "color" : "Green", "instock" : 50, ... },
{ "color" : "Yellow", "instock" : 50, ... },
]
次に、クエリを実行できます
db.foo.find( {"colors.prestock" : {$gte:30}} )
これにより、すべての色を含むオブジェクト全体が返されることに注意してください。つまり、クエリ制約が保持されていない色も返されます。これは、集計フレームワークを使用して解決できますが、ここでも、$unwind
のみを使用して解決できます。 これにはcolors
も必要です 配列になります。