I have Game collection in my DB:
var game = {
players: [{username:\"user1\", status:\"played\"},
{username:\"user2\", status:\"accepted\"}]
}
<
I ran into this problem too. I was trying to use $all
and making little to no progress. It helped to flip my perspective on the problem and use $not
instead. I wrote about what I found here.
In your situation, you should be able to do something like this:
db.games.find({
players: {
$not: {
$elemMatch: {
status: { $ne: "played" }
}
}
}
})
Find all documents with a player status not equal to "played"
and return the inverse of that set. The nice thing about this is that you never have to worry about adding more status values.