Aktualisieren verschachtelte Dokumente in mongodb
-
16-09-2019 - |
Frage
Sagen, dass ich eine Datenstruktur etwas wie diese:
{
'name': 'test',
'anotherdoc': {
'something': 'someval',
'somenum': 1
}
}
Nun, sage ich wollte etwas setzen. Anfangs dachte ich, wäre es wie so getan werden:
collection.update({'_id': myid}, {$set: {'anotherdoc.something': 'somenewval'});
Dies ist jedoch scheint falsch zu sein. Es ist dort einige Daten setzen, aber es tut dies in einer ungeraden Weise. Es wäre in diesem Fall am Ende etwa so:
[
{
'name': 'test',
'anotherdoc': {
'something': 'someval',
'somenum': 1
}
},
['anotherdoc.something', 'someval']
]
Natürlich nicht das, was ich suchte.
Lösung
Die folgenden Werke für mich von der Mongo Shell - so bin ich nicht sicher, was Sie oben passiert ist. Versuchen Sie dies und sehen, ob es funktioniert? Wenn ja würde ich greifen die neuesten Mongo Code, falls etwas verwendet sagen problematisch.
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"}}
>
Wie oben erwähnt, wahrscheinlich die MongoDB-Foren schneller gesehen (oder versuchen IRC).
Andere Tipps
Sie würden besser, dies in googlegroup des mongodb Benutzer fragen. Die Antwort auf Ihre Frage ist hier http://groups.google .com / Gruppe / mongodb-user / msg / 583d37ef41ef5cca? hl = en