2015-06-20 146 views
0

这里是我的JSON响应的样子:对象的内部JSON更新阵列

"_id" : 537, 
    "quizzes" : [ 
     { 
      "wk" : 1, 
      "score" : [ 
       10 
      ] 
     }, 
     { 
      "wk" : 2, 
      "score" : [ 
       8 
      ] 
     }, 
     { 
      "wk" : 3, 
      "score" : [ 
       5 
      ] 
     }, 
     { 
      "wk" : 4, 
      "score" : [ 
       6 
      ] 
     } 
    ] 
} 

我试图更新里面的对象之一比分阵列,这是我的尝试吧:

db.collection('connect').update({_id: id}, {$push: { quizzes[0]: { score: 89 } }}); 
+0

什么是预期的结果?如果您希望更新分数数组,以便它仍然是单个元素数组,请考虑使用更新运算符修饰符'“$ set”:{0} {0} {0} {0}解决方案 – chridam

回答

1

我认为你正在寻找

db.collection('connect').update({_id: id}, {$set: { "quizzes.0.score":89} }) 

一个更好的办法来做到这一点是不是对测验阵列和使用的指数回复了“周”属性

db.collection('connect').update({_id: id,quizzes:{$elemMatch:{"wk":1}}}, {$set: { quizzes.$.score: 89 } }}) 
+0

括号给我一个语法错误:SyntaxError:意外的标记[ –

+0

已更新。对不起,错误 –

+0

是的,在2分钟内将标记为答案。 –

2

尝试以下更新:

db.collection("connect").update(
    { 
     "_id": id    
    }, 
    { 
     "$set": { 
      "quizzes.0.score.0": 89  
     } 
    } 
); 

它使用dot notation访问一个数组中的元素,并访问嵌入文档的领域。

To access an element of an array by the zero-based index position, concatenate the array name with the dot (.) and zero-based index position, and enclose in quotes:

'<array>.<index>'