varios update una modificar insertar documentos documento crear consultas complejas comandos coleccion campo array agregar actualizar mongodb spring-mongo

update - Cómo actualizar un elemento de matriz particular en MongoDB



mongodb modificar documento (2)

Soy novato en MongoDB. He almacenado datos dentro de mongoDB en el siguiente formato

"_id" : ObjectId("51d5725c7be2c20819ac8a22"), "chrom" : "chr22", "pos" : 17060409, "information" : [ { "name" : "Category", "value" : "3" }, { "name" : "INDEL", "value" : "INDEL" }, { "name" : "DP", "value" : "31" }, { "name" : "FORMAT", "value" : "GT:PL:GQ" }, { "name" : "PV4", "value" : "1,0.21,0.00096,1" } ], "sampleID" : "Job1373964150558382243283"

Quiero actualizar el valor a 11, que tiene el nombre de Category . He intentado debajo de la consulta:

db.VariantEntries.update({$and:[ { "pos" : 117199533} , { "sampleID" : "Job1373964150558382243283"},{"information.name":"Category"}]},{$set:{''information.value'':''11''}})

pero Mongo responde

can''t append to array using string field name [value]

¿Cómo se puede formar una consulta que actualice el valor particular?


En MongoDB no puede direccionar valores de matriz de esta manera. Por lo tanto, debe cambiar su diseño de esquema a:

"information" : { ''category'' : 3, ''INDEL'' : INDEL ... }

Luego puede dirigirse a los campos individuales en su consulta:

db.VariantEntries.update( { {"pos" : 117199533} , {"sampleID" : "Job1373964150558382243283"}, {"information.category":3} }, { $set:{''information.category'':''11''} } )


Puede usar el operador $ posicional para identificar el primer elemento de matriz para que coincida con la consulta en la actualización de esta manera:

db.VariantEntries.update({ "pos": 17060409, "sampleID": "Job1373964150558382243283", "information.name":"Category" },{ $set:{''information.$.value'':''11''} })