Tengo una mongodb recogida en este formulario:
{id=ObjectId(....),key={dictionary of values}}
where dictionary of values is {'a':'1','b':'2'.....}
Vamos diccionario de valores 'd'
.
Necesito actualizar los valores de la clave en el 'd'
.
yo.e quiero cambiar 'a':'1'
a 'a':'2'
Cómo puede hago en pymongo?
Código va algo como esto:
productData is a collection in mongoDB
for p in productData.find():
for k,v in p.iteritems():
value=v['a']
value=value+1
v['a']=value
Ahora reflejar el nuevo valor en el productData.
Esto es lo que yo he probado y se introduce un nuevo par clave-valor en lugar de actualizar el
for p in productData.find():
for k,v in p.iteritems():
value=v['a']
value=value+1
v['a']=value
productData.update({'_id':mongoId},{"$set":{'d.a':'100'}},upsert=False)
- Duplicado de stackoverflow.com/questions/4372797/…
- Hace lo mismo aplica para la actualización de un campo existente?
- Bastante seguro de que lo hace, sí. Es probar y ver qué pasa.
- Por una parte se debe hacer «para k,v en p[‘d’].iteritems()» – también, Marque la respuesta más abajo funciona sin la creación de un nuevo par clave/valor. Usted debe publicar más de código para que podamos ver lo que están haciendo mal.
Puede utilizar los $sintaxis de set si desea establecer el valor de un documento a un valor arbitrario. Esta bien actualizar el valor si el atributo ya existe en el documento o crearlo si no. Si necesita establecer un único valor de un diccionario como el que usted describe, puede utilizar la notación de punto de acceso de valores del niño.
Si p es el objeto recuperado:
Para pymongo versiones < 3.0
Para pymongo versiones >= 3.0
Sin embargo, si usted simplemente necesita para incrementar el valor, este enfoque podría presentar problemas cuando varias solicitudes podrían estar ejecutándose al mismo tiempo. En lugar usted debe utilizar los $inc sintaxis:
Para pymongo versiones < 3.0:
Para pymongo versiones >= 3.0:
Esto asegura que su incrementos siempre va a pasar.
}
en tanto la actualización de las declaraciones en el$set
y$inc
parte.$set
debe ser citada:'$set'
. De lo contrario, se tira error de sintaxis.Con mi pymongo versión: 3.2.2 tuve que hacer las siguientes
Algo que hice hace poco, espero que ayude. Tengo una lista de diccionarios y quería añadir un valor a algunos de los documentos existentes.
en python los operadores deben estar entre comillas:
db.ProductData.update({‘fromAddress’:’http://localhost:7000/‘}, {«$set»: {‘fromAddress’: ‘http://localhost:5000/‘}},{«multi»: True})