将数据抓取到两个 MongoDB 集合中——现在我该如何比较结果?

Scraped data into two MongoDB collections--now how do I compare the results?

complete MongoDB/database noob 在这里所以任何提示将不胜感激。 我使用 scrapy 将数据直接抓取到本地托管的 MongoDB 服务器中。 我想将一个集合中的 "price" 数据与另一个集合中的 "price7" 数据进行比较。名称字段在集合中是相同的。 这样做的最佳方法是什么?

此处数据草率截图:

遗憾的是,您无法直接比较 mongo 中的 2 个系列,除非加入一些奇特的东西 javascript。

这是一个如何实现的示例,

由于您已经在使用 scrapy,并且似乎对疯狂的 mongodb 内部结构不太满意,因此很容易启动 python 脚本来进行评估

import pymongo
conn = pymongo.Connection('localhost', 27017)
db = conn['databasename']

for item in db.collection1.find():
    _id = item['_id']
    item2 = db.collection2.find({'_id':_id})
    print "{}: {}, {}: {}, diff: {}, a>b?:{}".format(
        item['name'], item['price'], item1['name'], 
        item1['price'], item['price'] - item1['price'],
        item['price'] > item1['price'])

最后,您可以修改您的 scrapy 模块,将两者都插入到同一个集合中,调整字段名称以识别来自不同来源的不同值,并只允许 mongo 合并它,在一个集合中您可以做一个更简单的查询来比较价格

db.unified_collection.find({$where: "this.price1 > this.price2"})  

(但是,这不允许您像 SQL 查询那样在单个查询中获得差异)

编辑:端口必须是整数 :)

更新: 明智的做法是注意上面的比较 ^ 假设您正在设置 ID 而不是使用 mongo 生成的 _id(看起来您可能正在使用),它们是随机生成的,因此它们之间没有关系2个相同的实体。为了将它们与上述任何一种方法(脚本,或让单独的爬虫使用相同的数据模型)正确匹配,您需要一些东西来限定唯一性,以便在两个来源之间进行任何理智的比较。
从您的数据图像来看,最安全的赌注似乎是在 "name" 字段上,但即使存在微小的差异,您也将无法获得足够的结果。无论是遍历 2 个集合并进行比较还是合并,您都需要一些规则来清理和比较以获得良好的匹配(正则表达式、soundex、其他字符串操作技巧),如果在 crawler/model 侧完成,您需要使您的统一集合在某个字段上唯一,并且您清理过的名称的哈希值将成为一个很好的候选值(以保持原始值的完整性)。

另一个选项是 SQL,对于您看起来正在做的分析测试很有用,但是您再次面临如何关联(更好的是如何操作关联)的问题,以及模式的阻碍changes/migrations(并且无法在可用的情况下存储额外的杂项数据)。