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''}
})