MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB, ajouter un nouveau { champ :valeur } dans un document intégré existant avec une notation par points à plusieurs niveaux ?

Ce que vous essayez de faire n'est pas possible compte tenu de votre schéma. La notation par points peut être à plusieurs niveaux, mais s'il y a plus d'un niveau qui est un tableau, il ne peut plus être adressé à l'aide de l'opérateur positionnel '$'.

Par exemple. il faudrait faire :

db.my_collection.update( 
    {'websites.blog_posts.url': 'http://www.example.com/01.html' },
    {'$set': {'websites.$.blog_posts.$.impressions': 549}},
     true );

Mais avoir deux opérateurs de position dans la mise à jour n'est pas possible car MongoDB ne peut déterminer que la position d'un élément dans le premier tableau.

Votre seule option est de reconcevoir votre schéma pour disposer d'une collection dédiée de sites Web d'utilisateurs (ce qui est également préférable pour d'autres raisons dans ce cas).