4

我做过研究。如果这是一个重复的问题,我深表歉意,但其他问题的解决方案并不适合我,因此,我提出了一个新问题。

用 Javascript 比较两个集合的最佳方法是什么?

我有数千个这种 Mongo 文档格式的标题:

{
    "url": "google.com",
    "headers": {
        "location": "http://www.google.com/",
        "content-type": "text/html; charset=UTF-8",
        "date": "Mon, 25 Mar 2013 18:12:08 GMT",
        "expires": "Wed, 24 Apr 2013 18:12:08 GMT",
        "cache-control": "public, max-age=2592000",
        "server": "gws",
        "content-length": "219",
        "x-xss-protection": "1; mode=block",
        "x-frame-options": "SAMEORIGIN"
    }
}

我今天跑了我的刮刀。将来,我会再次运行它,并将其存储在第二个集合中。此外,我希望能够比较三个特定的标头对象,即serverx-aspnet-versionx-powered-by,并检测是否有任何整数增量。

遍历两个集合并执行 diff() 的最佳方法是什么?

我做对了吗?任何建议将不胜感激。

4

1 回答 1

4

几个建议:

您可以使用 url 和访问日期(至少是 datetime 对象的一部分)的组合作为这些对象的 _id,因为据我所知,您计划每月抓取一次每个 url。

例子:

{
    "_id": {
        "url": "www.google.com",
        "date": ISODate("2013-03-01"),
    },
    // Other attributes
}

这会产生性能、唯一性和查询红利(请参阅这篇 4sq 博客文章)。您可以查询执行以下操作:

db.collection.find({
    "_id": {
        "$gte": {
            "url": yourUrl,
            "date": rangeStart
         },
         "$lt": {
            "url": yourUrl,
            "date": rangeEnd
         },
    }
})

这会产生出色的、很好的排序(按 url THEN 按日期,这似乎正是您想要的)结果。如果您只想要一组漂亮的所有 url 和已抓取的月份,您也可以使用此索引执行覆盖查询(通过 _id 字段)(这可以很好地设置您一次浏览每个 url) .

如果您有兴趣比较的文档的特定属性(headers.server例如)以及您想要为它们进行的特定比较(例如寻找版本号的任何增量),我会使用某种正则表达式来抓取与版本号相关的元素(快速而肮脏的元素可能只是检索所有数字元素)并为每个 url 绘制图表(我假设这可以让您可视化服务器软件随时间的变化)。您可以通过按顺序扫描它们并在字符串不相同时触发一些事件来轻松报告这些属性中的任何一个更改(可能然后报告更改或更改的数字部分)。

于 2013-03-25T23:49:34.553 回答