2009-07-17 42 views
15

Dire che ho una struttura dati simile a questa:documenti Aggiornamento nidificati mongodb

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

Ora, dicono volevo impostare qualcosa. Inizialmente, ho pensato che sarebbe stato fatto in questo modo:

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

Questo, tuttavia, sembra non essere corretto. Mette alcuni dati lì, ma lo fa in un modo strano. Sarebbe, in questo caso, finiscono in questo modo:

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

Naturalmente, non quello che cercavo.

risposta

14

I seguenti lavori per me dalla shell mongo - quindi non sono sicuro di quello che è successo sopra per te. Prova questo e vedi se funziona? In tal caso, direi di prendere l'ultimo codice mongo nel caso in cui qualcosa fosse problematico.

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"}} 
> 

Come accennato in precedenza, i forum MongoDB probabilmente ottenere visti più veloce (o provare IRC).

+0

hm, sinceramente stavo facendo questo test in python, piuttosto poi nell'interprete. Se funziona con l'interprete il problema deve trovarsi nella mia implementazione di questo in python. Verrò nei forum di MongoDB se ancora non riesco a farlo funzionare. – defrex

+1

E se 'anotherdoc.something' fosse un tipo di array, come potrei spingere un altro elemento a questo? – Val

Problemi correlati