En fråga som {"colors.*.prestock" : {$gte:30}}
är inte möjligt enligt SERVER-267
, och jag tvivlar på att detta kommer att stödjas under de kommande åren.
Det bästa är att ändra schemat till en array:
colors: [
{ "color" : "Green", "instock" : 50, ... },
{ "color" : "Yellow", "instock" : 50, ... },
]
Sedan kan du fråga
db.foo.find( {"colors.prestock" : {$gte:30}} )
Observera att detta kommer att returnera hela objektet, inklusive alla färger, d.v.s. även de för vilka frågebegränsningen inte gäller. Detta skulle kunna lösas med hjälp av aggregeringsramverket, men återigen, bara med $unwind
som också kräver colors
att vara en array.