使用Javascript扫描Mongo数据库,并在字符串不相同时触发事件

Scanning Mongo databases with Javascript and setting off events when strings are not identical

本文关键字:事件 字符串 扫描 Javascript Mongo 数据库 使用      更新时间:2023-09-26

我正试图在一个Javascript算法上工作,通过我的MongoDB循环,搜索两个相同的url,并做头部对象的分析。

下面是该对象的示例代码片段:

{
    "url": "www.professionalsupplementcenter.com",
    "date": "Tue Mar 26 2013 15:08:31 GMT-0400 (EDT)",
    "headers": {
        "server": "Microsoft-IIS/7.5",
        "x-aspnet-version": "4.0.30319",
        "x-powered-by": "ASP.NET"
    }
}

具体来说,我将有两个集合。这两个集合是MongoDB中间隔两个月的HTTP头刮擦的两个数据库。我们称它们为todayScrapetwoMonthFromNowScrape。通过这两个集合,我想比较它们的头对象,所以,server, x-aspnet-version, x-powered-by,看看这些数字中是否有任何升级,例如IIS/7.5升级到IIS/8.0(将来)。

我没有任何代码要显示,因为我根本不知道如何实现这个系统。我不知道该从何说起。我想首先比较这两个url,然后当程序确定这两个url都存在时,它将对三个头对象进行特定的比较。然后,当这些属性被改变时,它可以按顺序扫描它们,并在字符串不相同时触发一些事件,如console.log("There has been a change")

谁能给我一些建议,从哪里开始?我在这个问题上被困了几天,被困让我很沮丧。我真的很想开始实施它,但是我需要一些帮助。

您需要的第一件事是npm install mongodb(如果您还没有)。然后在app.js文件中:

var mongodb = require('mongodb');
var Server = mongodb.Server('127.0.0.1', 27017, {});
new mongodb.Db('scraperapp', Server, {w: 1}).open(function(err, db){
  var scrape = new mongodb.Collection(db, 'scrape');
  var scrapeFuture = new mongodb.Collection(db, 'scrapeFuture');
  scrape.find({url: {$exists: true}}).toArray(function(err, today_docs){
    if(!today_docs) return;
    var scrapeFn = function(i){
      var today_doc = today_docs[i];
      scrapeFuture.findOne({url: today_doc.url}, function(err, future_doc){
        if(!future_doc) return;
        if(today_doc.headers.server != future_doc.headers.server)
          console.log(today_doc.url + ':servers different');
        if(today_doc.headers['x-aspnet-version'] != future_doc.headers['x-aspnet-version'])
          console.log(today_doc.url + ':x-aspnet-versions different');
        if(today_doc.headers['x-powered-by'] != future_doc.headers['x-powered-by'])
          console.log(today_doc.url + ':x-powered-by different');
        if(today_docs[i+1]) scrapeFn(i+1);
      });
    }
    scrapeFn(0);
  });
});