我正在处理用NodeJS编写的这段代码,该代码基本上每5秒(一次1个条目)更新具有相应IP的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)}`);
// TODO get Element the cursor points to
addresses.forEach((a) => {
// TODO modify element
});
// TODO update elementto db
});
}else{
cursor = Fqdn.find({ }).cursor();
}
});
}, 5000);
}
答案 0 :(得分:0)
游标的回调中的doc
对象是Mongoose文档对象。来自文档http://mongoosejs.com/docs/documents.html:
猫鼬文档代表与存储在MongoDB中的文档的一对一映射。每个文档都是其模型的一个实例。
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);
}
您也可以使用doc.set()
来代替doc.addresses = addresses
,因为它们具有相同的效果。来自文档http://mongoosejs.com/docs/documents.html:
您还可以使用.set()修改文档。在引擎盖下,tank.size ='large';成为tank.set({size:'large'})。