Javascript 在无休止的循环中迭代更改数据库
我正在使用NodeJS编写的这段代码,它基本上每5秒用相应的ip更新一个Fqdn数据库(一次更新一个条目)。但是,如果我可以使用光标检索当前元素,那么就太好了,这样我就不必对匹配的名称运行查询。我在mongoose文档中没有发现太多关于游标的内容,有什么方法可以做到这一点吗Javascript 在无休止的循环中迭代更改数据库,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我正在使用NodeJS编写的这段代码,它基本上每5秒用相应的ip更新一个Fqdn数据库(一次更新一个条目)。但是,如果我可以使用光标检索当前元素,那么就太好了,这样我就不必对匹配的名称运行查询。我在mongoose文档中没有发现太多关于游标的内容,有什么方法可以做到这一点吗 DatabaseHandler.resolveFqdns = function () { let cursor = Fqdn.find({ }).cursor(); setInterval( function
DatabaseHandler.resolveFqdns = function () {
let cursor = Fqdn.find({ }).cursor();
setInterval( function () {
cursor.next(function(error, doc) {
if(doc){
debug(doc);
dns.resolve4(doc.url, (err, addresses) => {
if (err) throw err;
debug(`addresses: ${JSON.stringify(addresses)}`);
// TODO get Element the cursor points to
addresses.forEach((a) => {
// TODO modify element
});
// TODO update elementto db
});
}else{
cursor = Fqdn.find({ }).cursor();
}
});
}, 5000);
}光标回调中的
doc
对象是Mongoose文档对象。从文档中:
Mongoose文档表示到MongoDB中存储的文档的一对一映射。每个文档都是其模型的一个实例
因此,您可以使用和方法
您也可以使用doc.addresses=地址,而不是doc.set()
,因为它们具有相同的效果。从文档中:
还可以使用.set()修改文档。发动机罩下,油箱尺寸=‘大’;变成tank.set({size:'large'})
什么是“元素”?您能否将您的问题显示为示例Fqdn
文档或架构定义?
DatabaseHandler.resolveFqdns = function () {
let cursor = Fqdn.find().cursor();
setInterval(function () {
cursor.next(function(error, doc) {
if(doc){
debug(doc);
dns.resolve4(doc.url, (err, addresses) => {
if (err) throw err;
debug(`addresses: ${JSON.stringify(addresses)}`);
// update the document
doc.set('addresses', addresses);
// save changes
doc.save();
});
} else {
cursor = Fqdn.find().cursor();
}
});
}, 5000);
}