MongoDB中两个集合之间的Diff()

Diff() between two collections in MongoDB

本文关键字:之间 Diff 集合 两个 MongoDB      更新时间:2023-09-26

我做过调查。如果这是一个重复的问题,我很抱歉,但其他问题的解决方案并不适合我,因此,我提出了一个新的问题。

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

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

我做的对吗?如有任何建议,我将不胜感激。

几点建议:

您可以使用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然后按日期,这似乎正是你想要的)结果。你也可以使用这个索引来执行覆盖查询(在_id字段),如果你只是想要一个很好的集合的所有url和月份,你已经刮(这可以设置你很好地通过每个url一次一个)。

如果你有你感兴趣的特定文档的属性比较(例如headers.server)和一个特定的比较你想为他们做(例如寻找任何增量版本号),我将使用某种正则表达式的元素相关的版本号(快速和肮脏的可能只是一个检索所有数字元素)和图每个url(我认为这将让你想象改变随着时间的推移,服务器软件)。只要按顺序扫描这些属性,并在字符串不相同时触发一些事件(然后报告更改或更改的数字部分),您就可以轻松地报告任何这些属性的更改。