如何使用nodejs使用JSON对象更新现有数组

时间:2017-01-06 10:19:35

标签: arrays json node.js mongodb

我有一个如下所示的数组,让我们将其称为sobj

{
   '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]

2 个答案:

答案 0 :(得分:0)

我不知道你想要完成什么,但看起来你的for循环中有一个拼写错误。

您有一个名为sobj的对象,其中包含一个带有密钥data的数组,但是当您在for循环中引用数据时,您正在使用sobj[i].val和{{1并使用sobj的sobj[i].time

我假设您想要length内的数据?这意味着您将更改代码以引用数据的长度和键:

示例:

data

答案 1 :(得分:0)

我解决了我的问题,其中sobj{data:[{val:23,time:20},{val: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);
            });