sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB, ¿agregar nuevo {campo:valor} en el documento incrustado existente con notación de puntos de múltiples niveles?

Lo que está tratando de hacer no es posible dado su esquema. La notación de puntos puede ser de varios niveles, pero si hay más de un nivel que es una matriz, ya no se puede abordar con el operador posicional '$'.

P.ej. tendrías que hacer:

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

Pero no es posible tener dos operadores de posición en la actualización ya que MongoDB solo puede determinar la posición de un elemento en la primera matriz.

Su única opción es rediseñar su esquema para tener una colección dedicada de sitios web de usuarios (que también es mejor por otras razones en este caso).