gpt4 book ai didi

javascript - 在 MongoJS 中使用循环重复查找

转载 作者:太空宇宙 更新时间:2023-11-04 03:28:10 27 4
gpt4 key购买 nike

这是经典的 JavaScript 闭包与循环变量问题,但有一点不同。有一个 MongoDB 集合,其中包含存档的推文。我必须对其执行查找操作,搜索各种搜索词。这些单词以字符串形式存在于数组中,必须单独查找它们,并在单个 JSON 响应中返回所有结果。

最简单的方法似乎是在数组中运行 for 循环,并对每个元素执行 MongoJS find() 操作。虽然这实际上有效并返回正确的数据,但循环变量在回调函数中仍然无法访问,因为它始终为 4 - 循环的最后一个可能值,即数组最后一个元素的索引。

我需要知道调用回调时循环变量具有的正确值。任何人都知道如何做到这一点?谢谢。

  var searchwords = ['java', 'javascript', 'ruby', 'scala', 'python'];
var json = new Array();

for(t in searchwords) {

var regexp = new RegExp('\\b'+searchwords[t]+'\\b', 'gi');
coll.find({ 'timestamp_ms': { $gte: String(startdate) },
'timestamp_ms': { $ne: undefined },
'text': regexp
}, function(err, docs) {
json.push({
'searchword': searchwords[t],
'tweets': docs.length
});
console.log(t+' : '+docs.length);
});

}

res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });
res.end(JSON.stringify(json, null, ' '));

最佳答案

你能做的就是使用这个

var i = 0;
async.eachSeries(searchwords , function(word, cb){
var regexp = new RegExp('\\b'+searchwords[t]+'\\b', 'gi');
coll.find({ 'timestamp_ms': { $gte: String(startdate) },
'timestamp_ms': { $ne: undefined },
'text': regexp
}, function(err, docs) {
json.push({
'searchword':searchwords[t],
'tweets': docs.length
});
console.log(i+' : '+docs.length);
i++;
cb();
});
})

使用 fooloop 进行数据库调用不是一个好主意,因为它会将调用刷新在一起,并且当数组很大时会出现问题。这将为您提供正确的索引,因为在调用 cb() 之前不会调用下一次迭代

关于javascript - 在 MongoJS 中使用循环重复查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41777505/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com