-1

抱歉,我找不到答案,也看不懂英文。

什么关键字可以找到关于以下示例代码的答案?

for(var value in row){
db.collection('testdb').update({_id:'id'},{$addToSet:value},                                                                            
   { upsert: true },function(err){}
)
value.empty();

}

我不知道为什么我的代码不能工作

testdb: { "_id" : "id", "v" : [v1], "p" : [ p1] }

重复更新后

{ "_id" : "id", "v" : [v1,p2], "p" : [ p1,p2] }

但应该是

{ "_id" : "id", "v" : [v1,v2], "p" : [ p1,p2] }   

给尼尔伦

row count = 2 ;
row[0] = { "v" : [v2] }
row[1] = { "p" : [p2] }

致法里德·努里·内沙特

app.post('index',function(req,res){

    var doc =[];
    var d ={};
    var e ={}
    for(var value in req.body){            
        d[value]=doc;                
        e['$each']=doc;
        d[value]=e;               
        db.collection('testdb').update({_id:req.body.field},{$addToSet:d},                                       
           { upsert: true },function(err){})                                            
        doc=[];//clear doc
        d={};//clear d
        }
    }
 // req.body.count = 2
 // req.body[0] = { "v" : [v2] }
 // req.body[1] = { "p" : [p2] }

  }
4

1 回答 1

0

我认为您发布的代码不会复制问题。但是从pv数组都得到了最后一个值的情况来看,看起来你是在for循环的回调中运行update方法,所以当update方法运行时,key已经变成了最后一个key . 您可以在此问题中阅读有关该问题的更多信息:循环内的 JavaScript 闭包 – 简单的实际示例

我建议你尝试的是,而不是使用for(var value in req.body) {使用 Object.keys 的更改:

Object.keys(req.body).forEach(function (value) {
    // Do whatever you do inside the loop in here.
});

这将捕获value参数,并且在下一次迭代中不会改变。我已经在一个类似的问题中解释了这一点。

于 2014-05-20T15:55:00.593 回答