スキーマを考えると、実行しようとしていることは不可能です。ドット表記はマルチレベルにすることができますが、配列であるレベルが複数ある場合は、位置演算子「$」を使用してアドレス指定できなくなります。
例えば。あなたがする必要があるでしょう:
db.my_collection.update(
{'websites.blog_posts.url': 'http://www.example.com/01.html' },
{'$set': {'websites.$.blog_posts.$.impressions': 549}},
true );
ただし、MongoDBは最初の配列内の要素の位置しか判別できないため、更新に2つの位置演算子を含めることはできません。
唯一のオプションは、スキーマを再設計して、ユーザーWebサイトの専用コレクションを作成することです(この場合、他の理由からも優れています)。