Actualización de los documentos anidados en mongodb
-
16-09-2019 - |
Pregunta
Digamos que tiene una estructura de datos algo como esto:
{
'name': 'test',
'anotherdoc': {
'something': 'someval',
'somenum': 1
}
}
Ahora, dicen que quería establecer algo. Al principio, pensé que sería hecho de esta manera:
collection.update({'_id': myid}, {$set: {'anotherdoc.something': 'somenewval'});
Esto, sin embargo, parece ser incorrecta. Sí pone algunos datos allí, pero lo hace de una manera extraña. Sería, en este caso, acabar de esta manera:
[
{
'name': 'test',
'anotherdoc': {
'something': 'someval',
'somenum': 1
}
},
['anotherdoc.something', 'someval']
]
Por supuesto, no es lo que estaba buscando.
Solución
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í, diría agarrar el último código mongo en caso de que algo solía ser 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 consiguen considerados más rápido (o tratan de IRC).
Otros consejos
Es mejor que haga esta en googlegroup del usuario mongodb. La respuesta a su pregunta aquí es http://groups.google .com / grupo / mongodb-usuario / msg / 583d37ef41ef5cca? hl = es