Usa la notazione del punto:
Quando il campo contiene un documento incorporato, una query può specificare una corrispondenza esatta nel documento incorporato o specificare una corrispondenza per singoli campi nel documento incorporato utilizzando la notazione del punto.
db.coll.find({
"accounts._id" :ObjectId("5546329a470019850084a611")
})
Se devi produrre solo la parte di un array in cui hai il tuo _id, devi usare il dollaro nella proiezione
L'operatore posizionale $ limita il contenuto di un risultato della query a contenere solo il primo elemento che corrisponde al documento della query.
e la tua domanda sarebbe simile a:
db.coll.find({
"accounts._id" :ObjectId("5546329a470019850084a611")
}, {
"accounts.$.": 1
})
PS se hai bisogno dell'output come nelle tue domande modificate, usa questo:
db.coll.find({
"accounts._id" :ObjectId("5546329a470019850084a611")
}, {
accounts : 0
})