Utilisez la notation par points :
Lorsque le champ contient un document intégré, une requête peut soit spécifier une correspondance exacte sur le document intégré, soit spécifier une correspondance par champs individuels dans le document intégré en utilisant la notation par points.
db.coll.find({
"accounts._id" :ObjectId("5546329a470019850084a611")
})
Si vous avez besoin de sortir uniquement la partie d'un tableau où vous avez votre _id, vous devez utiliser dollar dans la projection
L'opérateur positionnel $ limite le contenu d'un des résultats de la requête pour qu'il ne contienne que le premier élément correspondant au document de la requête.
et votre requête ressemblerait à :
db.coll.find({
"accounts._id" :ObjectId("5546329a470019850084a611")
}, {
"accounts.$.": 1
})
P.S. si vous avez besoin de la sortie comme dans vos questions modifiées, utilisez ceci :
db.coll.find({
"accounts._id" :ObjectId("5546329a470019850084a611")
}, {
accounts : 0
})