Zapytanie takie jak {"colors.*.prestock" : {$gte:30}}
nie jest możliwe zgodnie z SERVER-267
, i wątpię, czy będzie to wspierane w następnych latach.
Najlepszym rozwiązaniem jest zmiana schematu na tablicę:
colors: [
{ "color" : "Green", "instock" : 50, ... },
{ "color" : "Yellow", "instock" : 50, ... },
]
Następnie możesz zapytać
db.foo.find( {"colors.prestock" : {$gte:30}} )
Zauważ, że zwróci to cały obiekt, w tym wszystkie kolory, tj. również te, dla których ograniczenie zapytania nie jest spełnione. Można to rozwiązać za pomocą frameworka agregacji, ale znowu, używając tylko $unwind
co wymaga również colors
być tablicą.