抱歉,我找不到答案,也读不懂英语。
关键字可以找到关于以下示例代码的答案吗?
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] }
}
答案 0 :(得分:0)
我认为你发布的代码并没有复制这个问题。但是从p
和v
数组都得到最后一个值的事实来看,看起来,你在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中解释了这一点。