我有一个如下所示的数组,让我们将其称为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]
答案 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);
});