Нямате нужда от пълната нотация, тъй като заместителят вече е преместен на тази позиция в масива.
db.junk.update(
{ "commandes.voyagesSouscrits.idVoyage": "123" },
{$pull: { "commandes.$.voyagesSouscrits": { idVoyage: "123" } }}
)
Тази част:
idVoyage: { <query> }
е необходим само защото позиционният оператор в "commandes.$.voyagesSouscrits " може да съответства само на първия позиция на масива, намерена в заявката.
http://docs.mongodb.org/manual/reference/operator/projection/positional/
Надявам се това да изясни нещата.