无限循环地遍历更改数据库

时间:2018-08-14 09:40:24

标签: javascript node.js mongodb mongoose

我正在处理用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);

}

1 个答案:

答案 0 :(得分:0)

游标的回调中的doc对象是Mongoose文档对象。来自文档http://mongoosejs.com/docs/documents.html

  

猫鼬文档代表与存储在MongoDB中的文档的一对一映射。每个文档都是其模型的一个实例。

因此,您可以使用setsave方法。

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'})。

相关问题