从 MongoDB 获取 _ids 列表 - 避免 'distinct too big'
Getting a list of _ids from MongoDB - Avoiding 'distinct too big'
我有一个文件,它从站点地图 .xml 文件中抓取数据,并从每个页面下载一些数据。每次我启动抓取功能时,我都会去这个 xml 获取要抓取的 URL,将它们放在一个列表中,将它们与我已经下载的 url 的列表进行比较,因此只需刮掉其余部分。我使用这些 URL 作为 mongodb:
的 _id
list_of_ids = collection.find().distinct('_id')
start_urls = list(set(new_url_list)-(set(list_of_ids)))
我现在遇到了以下错误:
pymongo.errors.OperationFailure: distinct too big, 16mb cap, full error: {'ok': 0.0, 'errmsg': 'distinct too big, 16mb cap', 'code': 17217, 'codeName': 'Location17217'}
我想我可以遍历数据库并将每个 _id 附加到一个列表中,但是虽然我不是一心想提高性能,但一定有更好的方法吗?
_id
s 必须是不同的,所以不确定为什么你需要使用不同的,除非这是一个简单的方法来获得一个没有混乱的列表。
试试这个:
list_of_ids = [x['_id'] for x in collection.find({}, {'_id': 1})]
事实上,如果你想要一套,使用类似的:
set_of_ids = {x['_id'] for x in collection.find({}, {'_id': 1})}
您可以使用 pymongo
的独特功能,直接 returns 您是一个列表
import pymongo
from pymongo import MongoClient
mongo = MongoClient('mongodb://localhost:27017')
db = mongo[dbname][collectionname]
distinct_list = db.distinct('_id')
我有一个文件,它从站点地图 .xml 文件中抓取数据,并从每个页面下载一些数据。每次我启动抓取功能时,我都会去这个 xml 获取要抓取的 URL,将它们放在一个列表中,将它们与我已经下载的 url 的列表进行比较,因此只需刮掉其余部分。我使用这些 URL 作为 mongodb:
的 _idlist_of_ids = collection.find().distinct('_id')
start_urls = list(set(new_url_list)-(set(list_of_ids)))
我现在遇到了以下错误:
pymongo.errors.OperationFailure: distinct too big, 16mb cap, full error: {'ok': 0.0, 'errmsg': 'distinct too big, 16mb cap', 'code': 17217, 'codeName': 'Location17217'}
我想我可以遍历数据库并将每个 _id 附加到一个列表中,但是虽然我不是一心想提高性能,但一定有更好的方法吗?
_id
s 必须是不同的,所以不确定为什么你需要使用不同的,除非这是一个简单的方法来获得一个没有混乱的列表。
试试这个:
list_of_ids = [x['_id'] for x in collection.find({}, {'_id': 1})]
事实上,如果你想要一套,使用类似的:
set_of_ids = {x['_id'] for x in collection.find({}, {'_id': 1})}
您可以使用 pymongo
的独特功能,直接 returns 您是一个列表
import pymongo
from pymongo import MongoClient
mongo = MongoClient('mongodb://localhost:27017')
db = mongo[dbname][collectionname]
distinct_list = db.distinct('_id')