I have the following document:
{
"_id" : 257655,
"name" : "Arrow",
"airsDayOfWeek" : "Wednesday",
"airsTime" : "8:00 PM",
"firstAired" : ISODate("2012-10-10T00:00:00.000+0000"),
"runtime" : 45,
"imdbId" : "tt2193021",
"seasons" : [
{
"number" : 1,
"episodes" : [
{
"_id" : 4599381,
"number" : 1,
"overview" : "Diggle and Felicity ...",
},
{
"_id" : 4365918,
"number" : 2,
"overview" : "Oliver heads ...",
}
]
},
{
"number" : 2,
"episodes" : [
{
"_id" : 4599398,
"number" : 1,
"overview" : "With crime in Starling Cit ...",
},
{
"_id" : 4365989,
"number" : 2,
"overview" : "Oliver finds out the medicine ...",
}
]
}
]
}
The following query
db.shows.find({ 'seasons.episodes.number': 1, 'seasons.number': 1, _id: 257655 })
returns the document with all records in seasons.episodes
I tried this one too
db.shows.aggregate([
{$match: { '$and': [ {'seasons.number': 1}, { 'seasons.episodes.number': 1}, {_id: 257655}] }},
{$project: {
seasons: {
$filter: {
input: '$seasons',
as: 'seasons',
cond: {$eq: ['$$seasons.episodes.number', 1]}
}
}
}}
])
but i got an error :exception: invalid operator '$filter'
However, I'd like to get the document only with the array that contains seasons.episodes.number = 1 and seasons.number = 1
{
seasons" : [
{
"number" : 1,
"episodes" :
{
"_id" : 4599381,
"number" : 1,
"overview" : "Diggle and Felicity ...",
}
}
]
}
How can I do this?