Quello che stai cercando di fare non è possibile dato il tuo schema. La notazione a punti può essere multilivello ma se c'è più di un livello che è un array non può più essere indirizzato usando l'operatore posizionale '$'.
Per esempio. dovresti fare:
db.my_collection.update(
{'websites.blog_posts.url': 'http://www.example.com/01.html' },
{'$set': {'websites.$.blog_posts.$.impressions': 549}},
true );
Ma non è possibile avere due operatori di posizione nell'aggiornamento poiché MongoDB può solo determinare la posizione di un elemento nel primo array.
La tua unica opzione è riprogettare il tuo schema per avere una raccolta dedicata di siti web degli utenti (che è meglio anche per altri motivi in questo caso).