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

Javascript MongoDB中两个集合之间的Diff(),javascript,node.js,mongodb,diff,Javascript,Node.js,Mongodb,Diff,我做过研究。如果这是一个重复的问题,我很抱歉,但是其他问题的解决方案并不适合我,因此,我提出了一个新问题 使用Javascript比较两个集合的最佳方法是什么 我有数千个这种Mongo文档格式的标题: { "url": "google.com", "headers": { "location": "http://www.google.com/", "content-type": "text/html; charset=UTF-8",

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

使用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-version
x-powered-by
,并检测是否存在任何整数增量

迭代两个集合并执行diff()的最佳方式是什么


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

有几点建议:

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

例如:

{
    "_id": {
        "url": "www.google.com",
        "date": ISODate("2013-03-01"),
    },
    // Other attributes
}
这将产生性能、唯一性和查询红利(请参阅)。您可以执行以下操作:

db.collection.find({
    "_id": {
        "$gte": {
            "url": yourUrl,
            "date": rangeStart
         },
         "$lt": {
            "url": yourUrl,
            "date": rangeEnd
         },
    }
})
这会产生非常好的排序结果(按url排序,然后按日期排序,这似乎正是您想要的)。如果您只想获得一组完整的url和您已获取的月份,您还可以使用此索引(通过_id字段)执行覆盖查询(这可以很好地设置您一次浏览每个url)


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

请在您的问题中添加一些额外的细节:我不明白您到底在比较什么。一个集合中的每个文档和另一个集合中的每个文档?多久一次,有多少个文档?性能是否重要(如果是,多少)?您尝试过什么(您应该发布您尝试过的内容)?我想每两个月比较一次
server
x-aspnet-version
x-powered-by
server
通常输出Microsoft IIS/7.0、Apache版本和/或nginx等信息。我想检测这些两个月扫描是否有任何更改。向我们展示代码你试过了。这听起来像是非常暴力的行为。我唯一的建议是使用
每个
的批大小要比
toArray
小。或者,使用
nextObject
。嗨,marr75。谢谢你的输入。我已经更改了我的标题,现在它们的格式是
url
日期
server
x-aspnet-version
x-powered-by
。是否存在纯粹的数字日期?如果这样说是正确的话,现在使用的日期很难分开。我的目标是在两者之间设置一个时间框架,并将
server
server
x-aspnet-version到
x-aspnet-version
,和
x-powered-by
。我喜欢您示例的第二个版本的外观。您试图实现的是让我们
$lt
$gt
设置日期范围,对吗?但我如何使用此示例?例如,我是否应该使用第一个和第二个集合来刮取两个集合ion相隔数月?我听说我应该使用一个集合,但这意味着我必须重新设计我的刮板代码,因为时间限制,我可能无法重新设计。我很高兴您实现了“按url,然后按日期,然后按其他变量”。这正是我想要做的。但也许我们可以忽略
日期作为标题,而只是比较两个集合?您的第一个代码示例也给了我一个实现。我尝试(在代码中)确保索引我的URL失败。
db.scrap.ensureIndex(“URL”,函数(e){console.log(“索引时出错”);})当你给一个新手一个键盘、一个想法和一个编辑器时,坏事往往会发生:P