Lo que intento hacer es agregar un nuevo {campo: valor} para una publicación de blog. Entonces, por ejemplo, si quisiera comenzar a rastrear impresiones en websites.blog_posts.url: 'http://www.example.com/01.html' ¿cómo puedo agregar ese atributo de impresiones para esa publicación de blog?MongoDB, agregue {field: valor} nuevo en documento incrustado existente con notación de puntos de múltiples niveles?
Mi estructura del documento actual:
{
email_address: '[email protected]',
password: 'random_password',
first_name: 'John',
last_name: 'Doe',
user_type: 'WEBMASTER',
newsletter: 'NO',
websites: [{
main_title: 'My Blog Website',
main_url: 'http://www.example.com',
blog_posts: [{
url: 'http://www.example.com/01.html',
title:'My first blog post',
description: 'My first description.'
}, {
url: 'http://www.example.com/02.html',
title: 'My second blog post',
description: 'My second description.'
}, {
url: 'http://www.example.com/03.html',
title: 'My third blog post',
description: 'My third description.'
}, {
url: 'http://www.example.com/04.html',
title: 'My fourth blog post',
description: 'My fourth description.'
}]
}]
}
Aquí es lo que pensé que trabajar mediante la actualización y haciendo upsert TRUE.
db.my_collection.update ({ 'websites.blog_posts.url': 'http://www.example.com/01.html'}, { '$ set': '{websites.blog_posts. impresiones: 549}}, true)
El error que he recibido es: * no se pueden agregar a la matriz usando el nombre de campo de cadena [blog_posts] *
Tal vez "$ set" es no es correcto para esto o tal vez no puedo hacer referencia a esa profundidad con la notación de puntos? Empecé a usar MongoDB ayer, cualquier ayuda sería genial.
¡Gracias!
Tiene razón, mi problema era mi esquema y mis corchetes incorrectos para almacenar un documento incrustado. En su lugar, estaba usando corchetes para una matriz. Ahora he agregado con éxito nuevos campos de 4 niveles de profundidad usando notación de puntos con el esquema apropiado. – Chris
Impresionante, buena suerte;) –