猫鼬 对于循环中的每个元素
Mongoose For each element in loop
我正在尝试遍历数组并将数组中的项目添加到 mongodb 数据库中(如果它尚不存在(。在循环中,我尝试查询我的数据库,如果数组中的下一个元素已经在数据库中。但是,在回调函数中,console.log 始终返回数组的最后一个元素。
for(var j = 0 ; j < req.body.array.length; j++ ){
var currenttag = req.body.array[j];
Tag.findOne({tagname : currenttag},
function(err,tag){
if(tag){
console.log("tag exists");
}
else{
console.log(currenttag);//returns the last tag in the array for array.length times
var newtag = new Tag({tagname : currenttag});
newtag.save();
}
});
}
我认为这个错误与Javascript中如何处理闭包有关。请在此处查看我的回答,以获取有关这意味着什么的更多详细信息。
在您的情况下,事件处理程序正在获取对 currentTag
的引用,该引用设置为循环的最后一个元素。
要解决此问题,您可以尝试执行以下操作:
var createTagIfMissing = function (currentTag){
Tag.findOne({tagname : currenttag},
function(err,tag){
if(tag){
console.log("tag exists");
}
else{
console.log(currenttag);
var newtag = new Tag({tagname : currenttag});
newtag.save();
}
});
}
for(var j = 0 ; j < req.body.array.length; j++ ){
createTagIfMissing(req.body.array[j]);
}
您可以进一步推动此操作,并将此方法定义为标记静态之一:
//In your db.js file, before mongoose.model('Tag',Tag);
Tag.statics.createTagIfMissing = function(tag){
this.findOne //...
}
然后,在您的路由器代码中:
for(var j = 0 ; j < req.body.array.length; j++ ){
Tag.createTagIfMissing(req.body.array[j]);
}
相关文章:
- 如何使用jquery处理php循环通过元素
- 每个$.,循环获胜't逐个迭代HTML元素
- JS.循环遍历多维数组,以计数元素在每列中的出现次数
- js循环遍历单击的元素子节点
- $.每个jquery循环打印一个“;未定义的“;对于getJSON请求后的每个元素,网格数据都会完美地打印出来
- 循环遍历元素jquery选择器
- 特定循环(html元素)方法的优点和缺点
- 循环对象时更新页面上的DIV元素
- 基于事件在循环中隐藏元素
- 在元素数组上循环只会影响最后一个元素
- 关于动态元素中循环中的事件
- 在没有大量回调函数的情况下在列表元素上循环播放同一动画
- PHP:同时循环元素粘在一起
- AngularJs localStorage在循环中删除元素
- 按数据属性循环元素并替换值
- 如何使用 for 循环 jquery 将相应的值附加到相应的 dom 元素
- JQuery:如何在循环 dom 元素时正确缩进字符串
- 使用 for 循环用逗号分隔的值填充选择元素
- 翡翠:每4个元素循环一次,改变职业
- 如何在javascript中使用提取元素循环图像