2012-06-29 12 views
5

Aquí hay un ejemplo de lo que estoy tratando de hacer, ya que no puedo explicar a qué me refiero.¿Cómo agrego otro valor a un diccionario en MongoDB?

Ejecuto esto en la CLI de mongo: db.posts.insert({name: "Hello, world!, body: "Here's my first blog post. Happy reading!", comments: []}). Lo que quiero hacer es actualizar esa entrada para agregar un comentario al diccionario comments.

¿Cómo conseguiría esto usando db.posts.update()?

+0

He editado la pregunta para que sea una "pregunta real".Si esto aún no cumple con sus estándares, dígame cuál es el problema. –

+0

Para agregar un elemento a una matriz, creo que lo que desea es $ push o $ addToSet: http://www.mongodb.org/display/DOCS/Updating – matulef

Respuesta

-2

Para un objeto como:

{ 
    name: "Hello, world!", 
    content: "This is my first post" 
} 

si ahora ejecuta

db.posts.update({name: "Hello, world!"}, {name: "First post"}); 

esto es lo que sería el resultado:

{ 
    title: "First post" 
} 

El atributo contenido será eliminado, ya que hay no se proporcionan valores de reemplazo Menciono esto porque este es un error común.

Así que si usted quiere "añadir" un atributo, es necesario ejecutar: se utiliza

db.posts.update({name: "Hello, world!" }, { $push: {comments: "First comment!"}}); 

$ impulso si está anexando los datos en una matriz. Si es un campo normal, use $ set.

Referencia: pregunta y ejemplo http://www.mongodb.org/display/DOCS/Updating

6

del OP no coinciden. Él realmente quiere insertar un campo en una matriz dentro del documento, lo que significa que

db.posts.update({name: "Hello, world!" }, { $push: {comments: "First comment!"}}); 

funciona bien.

Sin embargo, si desea agregar un valor o subdocumento a un diccionario, usaría el comando $set. Tome este documento como nuestro ejemplo:

{ 
    "_id": { 
     "$oid": "538420b2862a656e9e99fc93" 
    }, 
    "name": "Farmer John", 
    "items": { 
     "peaches": 5, 
     "bananas": 10 
    } 
} 

Digamos que usted desea agregar "apples": 2 a los artículos. El comando sería

db.collection.update({"name": "Farmer John"}, 
        {"$set": {"items.apples": 2}}); 

El documento tendría el siguiente aspecto:

{ 
    "_id": { 
     "$oid": "538420b2862a656e9e99fc93" 
    }, 
    "name": "Farmer John", 
    "items": { 
     "peaches": 5, 
     "bananas": 10, 
     "apples: 2 
    } 
} 

Tenga en cuenta que esto funciona con la inserción de subdocumento, así, por lo que podemos modificar el original ejemplo:

{ 
    "_id": { 
     "$oid": "538420b2862a656e9e99fc93" 
    }, 
    "name": "Farmer John", 
    "items": { 
     "peaches": { 
      "yellow": 5, 
      "white": 3 
     } 
    } 
} 

E inserte 4 manzanas granny smith y 8 manzanas fuji.

db.collection.update({"name": "Farmer John"}, 
        {"$set": {"items.apples": {"fuji": 8, "granny smith": 4}}}); 

Nuestro documento sería ahora:

{ 
    "_id": { 
     "$oid": "538420b2862a656e9e99fc93" 
    }, 
    "name": "Farmer John", 
    "items": { 
     "peaches": { 
      "yellow": 5, 
      "white": 3 
     }, 
     "apples": { 
      "fuji": 8, 
      "granny smith": 4 
     } 
    } 
} 

Un último comentario: tenga en cuenta que si el subdocumento o campo ya existe, entonces será anulado por el comando $set.

Cuestiones relacionadas