2015-06-20 4 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 ': { "quizzes.0.score.0": 89 } ', как указано в моей ниже. – chridam

ответ

1

Я думаю, что вы ищете

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

лучший способ сделать это, чтобы не отвечать на индекс массива и использование викторина «WK» атрибут

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>' 
Смежные вопросы