I have a collection with documents that look like this:
\"awards\" : {
\"oscars\" : [
{\"award\": \"bestAnimatedFeature\", \"result\": \"won\"},
You need to use the dot notation to specify an exact match on the embedded document and use the $in operator to select those documents that won or were nominated for best picture
You shouldn't use the $or operator here because it will perform a collection scan if not all the clauses are supported by indexes as mention in the documentation.
db.my_collection.find({
'awards.oscars.award': 'bestPicture',
'awards.oscars.result': { '$in': [ 'won', 'nominated' ] }
} )
According to the MongoDB Query documentation, you can match a field in an embedded document within an array by concatenating its name to the name of the array like so:
db.my_collection.find(
{
'awards.oscars.award': 'bestPicture',
$or: [
{ 'awards.oscars.result': 'won' },
{ 'awards.oscars.result': 'nominated' }
]
}
)