2013-07-16 81 views
0

我是MongoDB的新手。我已经存储在以下格式如何更新MongoDB中的特定数组元素

"_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" 

我想更新价值11其名称为Category内MongoDB的数据。 我曾尝试下面的查询:

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

但蒙戈回复

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

怎样才能形成一个查询将更新特定的价值?

+0

你有没有看着http://stackoverflow.com/questions/13040344/cant-append-to-array-using-string-field-name-when-performing-update -on-ARRA –

回答

2

可以使用$位置操作,以确定第一个数组元素匹配查询在这样的更新:

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

在MongoDB中,您无法以这种方式来处理数组值。所以,你应该改变你的架构设计:

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

然后你就可以ADRESS查询中的单场:

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