MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB, adicionar novo { campo :valor } no documento incorporado existente com notação de ponto de vários níveis?


O que você está tentando fazer não é possível devido ao seu esquema. A notação de ponto pode ser multinível, mas se houver mais de um nível que seja uma matriz, ela não poderá mais ser endereçada usando o operador posicional '$'.

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

Mas ter dois operadores de posição na atualização não é possível, pois o MongoDB só pode determinar a posição de um elemento no primeiro array.

Sua única opção é redesenhar seu esquema para ter uma coleção dedicada de sites de usuários (o que é melhor por outros motivos também neste caso).