使用网络抓取机器人,当用户在不和谐聊天中使用!stats时,它将显示其使用cheerio从站点抓取的统计信息。每次调用该命令时,都会刮取该站点并提取新统计信息。但是问题是我在更新mongodb中的新值时遇到困难。请参阅带有注释的console.logs。任何帮助将不胜感激,感觉就像我错过了一些超级简单。我尝试过find,findOne和findOneAndUpdate,并且都遇到相同的问题。
Stats.find({}, 'userId', { '_id': 0 }, function (err, docs) {
for (i = 0; i < docs.length; i++) {
ids.push(docs[i].userId);
}
/////
ids.forEach(function (entry) {
var userUrl = 'https://popflash.site/user/' + entry;
rp(userUrl)
.then(function (html) {
const arr = [];
var e = 0;
$('.stat-container', html).each(function (key, value) {
arr[e++] = $(this).find(".stat").text();
});
var results = arr.map(Number)
console.log(results); //this is printing the newly scraped stats from the site which is working fine.
var query = { userId: entry };
Stats.find(query, {
$set: {
HLTV: results[0],
ADR: results[1],
HS: results[2],
W: results[3],
L: results[4],
T: results[5],
totalGames: results[3] + results[4],
win_percent: results[6]
}
})
.then(function (result) {
console.log(result) //this is displaying old stats that are stored in the db, seems to not be updating.
})
})
});
});
答案 0 :(得分:0)
您正在运行find
查询,当然结果将是数据库中已有的内容。如果要update
数据库,则需要使用update
方法。
Stats.update(query, {
$set: {
HLTV: results[0],
ADR: results[1],
HS: results[2],
W: results[3],
L: results[4],
T: results[5],
totalGames: results[3] + results[4],
win_percent: results[6]
}
})