Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将数据刮到两个MongoDB集合中--现在如何比较结果?_Python_Mongodb_Scrapy_Pymongo - Fatal编程技术网

Python 将数据刮到两个MongoDB集合中--现在如何比较结果?

Python 将数据刮到两个MongoDB集合中--现在如何比较结果?,python,mongodb,scrapy,pymongo,Python,Mongodb,Scrapy,Pymongo,请在此填写MongoDB/database noob,如有任何提示,将不胜感激。 我使用scrapy直接将数据刮到本地托管的MongoDB服务器中。 我想将一个集合中的“价格”数据与另一个集合中的“价格7”数据进行比较。集合中的“名称”字段相同。 这样做的最佳方式是什么 这里数据的粗略截图:不幸的是,如果不添加一些花哨的javascript,您无法直接比较mongo中的两个集合 这是一个你如何做到这一点的例子 由于您已经在使用scrapy,而且似乎对疯狂的mongodb内部结构不太适应,因此很容

请在此填写MongoDB/database noob,如有任何提示,将不胜感激。 我使用scrapy直接将数据刮到本地托管的MongoDB服务器中。 我想将一个集合中的“价格”数据与另一个集合中的“价格7”数据进行比较。集合中的“名称”字段相同。 这样做的最佳方式是什么


这里数据的粗略截图:

不幸的是,如果不添加一些花哨的javascript,您无法直接比较mongo中的两个集合

这是一个你如何做到这一点的例子

由于您已经在使用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查询那样在单个查询中获得差异)

编辑:端口必须为int:)

更新: 请注意,上面的比较是假设您正在设置ID,而不是使用mongo生成的_ID(看起来您可能正在使用),它们是随机生成的,因此两个相同实体之间没有关系。为了将它们与上述任何一种方法(脚本,或让单独的爬虫程序使用相同的数据模型)正确地匹配,您需要对唯一性进行限定,以便在这两个源之间进行合理的比较。
从您的数据图像来看,看起来最安全的赌注是“名称”字段,但如果存在微小的差异,您将无法获得足够的结果。无论是迭代2个集合并进行比较还是合并,您都需要一些规则来清理和比较以获得良好的匹配(regex、soundex、其他字符串操作技巧),如果在爬虫/模型端完成,您需要使统一集合在字段上唯一,并且清理后的名称的哈希将成为一个很好的候选值(以使原始值保持圆滑)


另一种选择是SQL,它对于您希望进行的分析测试非常有用,但您同样面临如何关联(更好,如何操作以关联)的问题,以及架构更改/迁移的阻碍(以及在可用的情况下缺乏存储额外杂项数据的能力).

不幸的是,如果不添加一些花哨的javascript,就无法直接比较mongo中的两个集合

这是一个你如何做到这一点的例子

由于您已经在使用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查询那样在单个查询中获得差异)

编辑:端口必须为int:)

更新: 请注意,上面的比较是假设您正在设置ID,而不是使用mongo生成的_ID(看起来您可能正在使用),它们是随机生成的,因此两个相同实体之间没有关系。为了将它们与上述任何一种方法(脚本,或让单独的爬虫程序使用相同的数据模型)正确地匹配,您需要对唯一性进行限定,以便在这两个源之间进行合理的比较。
从您的数据图像来看,看起来最安全的赌注是“名称”字段,但如果存在微小的差异,您将无法获得足够的结果。无论是迭代2个集合并进行比较还是合并,您都需要一些规则来清理和比较以获得良好的匹配(regex、soundex、其他字符串操作技巧),如果在爬虫/模型端完成,您需要使统一集合在字段上唯一,并且清理后的名称的哈希将成为一个很好的候选值(以使原始值保持圆滑)


另一种选择是SQL,它对于您希望进行的分析测试非常有用,但您同样面临如何关联(更好,如何操作以关联)的问题,以及架构更改/迁移的阻碍(以及在可用的情况下缺乏存储额外杂项数据的能力).

不幸的是,如果不添加一些花哨的javascript,就无法直接比较mongo中的两个集合

这是一个你如何做到这一点的例子

由于您已经在使用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查询那样在单个查询中获得差异)

编辑:端口必须为int:)

更新: 请注意,上面的比较是假设您正在设置ID,而不是使用mongo生成的_ID(看起来您可能正在使用),它们是随机生成的,因此两个相同实体之间没有关系。为了将它们与上述任何一种方法(脚本,或让单独的爬虫程序使用相同的数据模型)正确地匹配,您需要对唯一性进行限定,以便在这两个源之间进行合理的比较。
从您的数据图像来看,最安全的赌注似乎是在“名称”字段上,但如果有一点