2009-07-17 16 views
15

Digamos que tiene una estructura de datos algo como esto:documentos Actualizando anidados en mongodb

{ 
    'name': 'test', 
    'anotherdoc': { 
     'something': 'someval', 
     'somenum': 1 
    } 
} 

Ahora, dicen que quería establecer algo. Inicialmente, pensé que se haría así:

collection.update({'_id': myid}, {$set: {'anotherdoc.something': 'somenewval'}); 

Esto, sin embargo, parece ser incorrecto. Pone algunos datos allí, pero lo hace de una manera extraña. Sería, en este caso, terminar así:

[ 
    { 
     'name': 'test', 
     'anotherdoc': { 
      'something': 'someval', 
      'somenum': 1 
     } 
    }, 
    ['anotherdoc.something', 'someval'] 
] 

Por supuesto, no es lo que estaba buscando.

Respuesta

14

Los siguientes obras para mí desde la consola mongo - así que no estoy seguro de lo que pasó por encima de ti. ¿Intenta esto y mira si funciona? Si es así, yo diría que tome el último código de mongo en caso de que algo sea problemático.

x = { 'name': 'test', anotherdoc: { 'something': 'someval', somenum : 1 } } 
> x 
{"name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}} 
> collection = db.foo; 
test.foo 
> collection.insert(x) 
> collection.find() 
{"_id" : ObjectId("4a61b6711591f41f0f1bc5ff") , "name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}} 
> x 
{"name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}} 
> x._id 
> x = collection.findOne() 
{"_id" : ObjectId("4a61b6711591f41f0f1bc5ff") , "name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}} 
> collection.update({'_id': x._id}, {$set: {'anotherdoc.something': 'somenewval'}}) 
> collection.find() 
{"_id" : ObjectId("4a61b6711591f41f0f1bc5ff") , "name" : "test" , "anotherdoc" : {"somenum" : 1 , "something" : "somenewval"}} 
> 

Como se mencionó anteriormente, los foros de MongoDB probablemente se vean más rápido (o intente IRC).

+0

hm, la verdad estaba haciendo esta prueba en python, en lugar de en el intérprete. Si funciona con el intérprete, el problema debe residir en mi implementación de esto en python. Iré a los foros de MongoDB si todavía no puedo hacerlo funcionar. – defrex

+1

¿Qué pasa si 'anotherdoc.something' fuera un tipo de matriz, ¿cómo podría presionar otro elemento para eso? – Val

Cuestiones relacionadas