2017-01-06 4 views
0

у меня есть один массив, как показано ниже, и будем называть его как sobjКак обновить существующий массив объектов JSON с помощью nodejs

{ 
    'name':abc, 
    'data':[ 
     [ 
      {'val':23} 
      {'time':23} 
     ], 
     [ 
      {'val':32} 
      {'time':32} 
     ] 
    ] 
} 

Чтобы обновить этот массив с помощью метода findAndModify я использую ниже код.

for (var i=0; i<(sobj.length-1); i++) { //in this example, sobj.length is 2 
    updateStr += '\"data.'+parseInt(i)+'\":'{val:sobj[i].val,time:sobj[i].time}+','; 
} 
    updateStr += '\"data.'+parseInt(i)+'\":'+type:sobj[i].type,val:sobj[i].val,time:sobj[i].time}; 

И я пытаюсь обновить базу данных, используя приведенный ниже код.

collection.findAndModify({'name':'abc'},[['_id',-1]],{$push:{updateStr}},{new:true,upsert:false},function(err,result){ 
      if (err) reject(err); 
      else 
       resolve(result); 
     }); 

Хотя updateStr, как показано ниже, не обновляет базу данных при использовании вышеуказанного кода. Можете ли вы сообщить мне правильный способ его обработки.

"data.0":[object Object],"data:1":[object Object],"data.2":[object Object] 

ответ

0

я решил мою проблему, как это, где sobj является {data:[{val:23,time:20}, {вал: 23, время: 20 }]}, а другой JSON {'name':'abc', 'info':{[][]}}, в который я хотел нажать значения sobj.

for (var i=0; i<(sobj.length-1); i++) {   
    updateStr += '\"info.'+i+'\":{\"val\":\"'+sobj[i].val+'\",\"time\":\"'+sobj[i].time+'\"},';   
}  
updateStr += '\"info.'+i+'\":{\"val\":\"'+sobj[i].val+'\",\"time\":\"'+sobj[i].time+'\"}}'; 


var field = {$push:JSON.parse(updateStr)}; 

collection.findAndModify({'name':'abc'},[['_id',-1]],field,{new:true,upsert:false},function(err,result){ 
      if (err) reject(err); 
       else 
        resolve(result); 
      }); 
0

Я не знаю точно, что вы пытаетесь выполнить, но похоже, что в вашем цикле есть опечатка.

У вас есть объект с именем sobj с массивом в нем с ключом data, но когда вы ссылаетесь ваши данные в вашем цикл вы используете sobj[i].val и sobj[i].time и используя length из sobj.

Я предполагаю, что вы хотите данные внутри data? Это будет означать, вам придется изменить свой код для ссылки на длину и ключи данных:

Пример:

for (var i=0; i<(sobj.data.length-1); i++) { 
    updateStr += '\"data.'+parseInt(i)+'\":'{val:sobj.data[i].val,time:sobj.data[i].time}+','; 
} 
+0

Прошу прощения, пусть sobj будет чем-то вроде {data: [{val: 23, time: 20}, {val: 32, time: 22}]}, который содержит два объекта JSON в массиве. Предположим, что у меня есть другой объект JSON с именами и полями данных. Значение поля данных представляет собой массив массивов, таких как данные: [[{a: b}], [{e: f}], [{h: g}]] Теперь я хочу обновить поле данных, извлекая каждый объект JSON из sobj и хранить его в отдельных вспомогательных массивах, например, например: [[{val: 23, time: 23}, {val: 34, time: 34}], [{val: 45, time: 45} {вал: 67, время: 67}], [{вал: 55, время: 55} {вал: 44, время: 44}]. –

Смежные вопросы