什么关键词关于mongodb在mongodb中重复$ addtoset(我读了一点英语)

时间:2014-05-19 03:24:17

标签: javascript node.js mongodb express mongoskin

抱歉,我找不到答案,也读不懂英语。

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

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] }   

到Neil Lunn

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

致Farid Nouri Neshat

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] }

  }

1 个答案:

答案 0 :(得分:0)

我认为你发布的代码并没有复制这个问题。但是从pv数组都得到最后一个值的事实来看,看起来,你在for循环的回调中运行update方法,所以当运行update方法时,密钥已经更改为最后一个密钥。您可以在此问题中详细了解该问题:JavaScript closure inside loops – simple practical example

我建议您尝试使用Object.keys代替使用for(var value in req.body) {更改:

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

这将捕获value参数,并且在下一次迭代中不会发生变化。我已在similar problem中解释了这一点。