Javascript 使用Node.js和MongoDB检测站点平台更改所需的建议

Javascript 使用Node.js和MongoDB检测站点平台更改所需的建议,javascript,regex,node.js,mongodb,document,Javascript,Regex,Node.js,Mongodb,Document,我需要为我正在从事的这个项目提供一些建议 我目前正在处理一个项目,请求标题;下面是一个使用Mongo文档样式的刮取页眉示例: { "url": "google.com", "statusCode": 301, "headers": { "location": "http://www.google.com/", "content-type": "text/html; charset=UTF-8", "date": "Mon,

我需要为我正在从事的这个项目提供一些建议

我目前正在处理一个项目,请求标题;下面是一个使用Mongo文档样式的刮取页眉示例:

{
    "url": "google.com",
    "statusCode": 301,
    "headers": {
        "location": "http://www.google.com/",
        "content-type": "text/html; charset=UTF-8",
        "date": "Mon, 25 Mar 2013 13:50:31 GMT",
        "expires": "Wed, 24 Apr 2013 13:50:31 GMT",
        "cache-control": "public, max-age=2592000",
        "server": "gws",
        "content-length": "219",
        "x-xss-protection": "1; mode=block",
        "x-frame-options": "SAMEORIGIN"
    }
}
该项目使用Node.JS、Javascript和MongoDB。目前,我在MongoDB中存储了几千个这样的响应,我感兴趣的是使用
标题中的
项来检测平台更改。像
server
x-powered-by
x-aspnet-version
这样的标题在我看来都是将来可以用来交叉引用的标题。例如,如果我在两个月后再次运行此刮板时,网站“今日”已从
Microsoft IIS/7.0
升级到
Microsoft IIS/7.5
,则有理由相信此网站中存在升级

我的问题是——什么是最好的方法

我是否应该进行两次收集—
今天收集
两个月收集

然后对每个
服务器
x-powered-by
x-aspnet-version
执行整数更改/增量的正则表达式搜索

如何实施这项工作


如果您有任何建议,我们将不胜感激。

有几种方法可供您参考。一种是,正如您所建议的,为每个时间段创建不同的集合,并为每个时间段存储整个标题组。然后,您可以通过为每个时间段的url运行
find
,比较应用程序端的结果,并报告结果来查询差异

另一种方法是存储一个“differences”集合,该集合为每个时间点保存当时的标题与上次查询的标题之间的差异。这将在每次查询头时需要更多的应用程序逻辑,但在实际查询差异时需要更少的工作。这就是我要做的

编辑

如果这是你需要的三个标题,那么我认为这听起来不错。请记住,当您进行查询以查找差异时,您需要查找每个标头最后一次更改以进行比较的时间,这意味着集合中的最后一个条目(按时间)都对应于正确的url,并且具有相关标头的条目

用于扩散的Psuedo代码:

for every url you want:
    query collection by url, sorting by date 
    for each header:
        find the last document with that field
        if the header value in that document and the current header are different:
            add the field to the new document
    add the new document, holding the url, date, and all different fields, to the collection

谢谢你的回复@shelman。你的第二个选择听起来很棒。我可以简单地要求MongoDB存储三个
标题[项目]
-
服务器
x-aspnet-version
x-powered-by
的差异集合(针对每个URL)。你觉得怎么样?听起来不错-看我的编辑。此外,每个文档都有一个
url
字段的一个“差异”集合应该足够了,而不是每个url都有一个单独的集合。你能用一些代码来扩展这个集合吗?我并不是要你为我做这件事,但是,如果你能用代码(甚至是伪代码)来扩展它,我可以理解它。有关更多信息,请通过
ensureIndex
url
用作“主键”。请参阅我的编辑-假设所讨论的集合是包含url差异的集合。您需要在
{url:1,date:-1}
上建立一个复合索引。a是多个字段的索引,而不仅仅是一个字段。它将允许您对所需的查询+排序使用相同的索引,因为文档在索引中的排序顺序已经正确。如果您想了解更多的细节,这里有一个由10gen开发人员编写的示例。