MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB, aggiungi nuovo {field:value} nel documento incorporato esistente con notazione a punti a più livelli?

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).