1

我正在尝试使用 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 标头抓取的数据库。让我们称它们为todayScrapeand twoMonthFromNowScrape。通过这两个集合,我想比较它们的头对象,所以,,,,server看看x-aspnet-version这些x-powered-by数字是否有任何升级,EGIIS/7.5升级到IIS/8.0(将来)。

我没有任何代码要显示,因为我根本不知道如何实现这个系统。我不知道从哪里开始。我想首先比较这两个 URL,然后当程序识别出两个 URL 都存在时,它会对三个标头对象进行特定的比较。然后,它可以通过按顺序扫描这些属性并引发一些事件(例如console.log("There has been a change")字符串不相同时)来报告这些属性何时发生更改。

谁能给我任何关于从哪里开始的建议?几天来我一直在这个问题上被困住,被困住令人沮丧。我真的很想开始实施它,但我需要一些帮助。

4

1 回答 1

1

您需要的第一件事是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);
  });
});
于 2013-03-26T19:42:12.980 回答