MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB, neues {Feld:Wert} in bestehendem eingebettetem Dokument mit Punktnotation auf mehreren Ebenen hinzufügen?

Was Sie versuchen, ist angesichts Ihres Schemas nicht möglich. Die Punktnotation kann mehrstufig sein, aber wenn es mehr als eine Ebene gibt, die ein Array ist, kann es nicht mehr mit dem Positionsoperator '$' angesprochen werden.

Z.B. Sie müssten Folgendes tun:

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

Es ist jedoch nicht möglich, zwei Positionsoperatoren in der Aktualisierung zu haben, da MongoDB nur die Position eines Elements im ersten Array bestimmen kann.

Ihre einzige Möglichkeit besteht darin, Ihr Schema so umzugestalten, dass es eine dedizierte Sammlung von Benutzer-Websites hat (was in diesem Fall auch aus anderen Gründen besser ist).