问题描述
我的本地机器上有一个 python pandas 数据框,并且可以访问远程 mongodb 服务器,该服务器具有我可以通过 pymongo 查询的其他数据。
如果我的本地数据框很大,比如说 40k 行,每行 3 列,那么检查本地数据框的特征与包含数百万文档的远程集合的交集的最有效方法是什么?
我在这里寻求一般建议。 我以为我可以从 3 个特征中的每一个中获取一个不同的值列表,并在 $or find 语句中使用这些值中的每一个,但是如果我为 3 个特征之一有 90k 个不同的值,这似乎是一个坏主意。
所以任何意见都会非常受欢迎。 我无权将本地数据帧插入远程服务器,我只有选择/查找访问权限。
非常感谢!
1楼
正如您已经解释过的那样,您将无法插入数据。
所以唯一可能的是首先将唯一值放入列表中。
df['column_name'].unique()
。
然后您可以在.find()
方法中使用$in
运算符并将您的列表作为参数传递。
如果需要时间或太多。
然后将您的列表[[id1, id2, id3], [id4, id5, id6] ... ]
相等的块,我的意思是列表[[id1, id2, id3], [id4, id5, id6] ... ]
并for sub-list in list: db.xyz.find({'key':{'$in': sublist}}, {'_id': 1})
执行 for 循环for sub-list in list: db.xyz.find({'key':{'$in': sublist}}, {'_id': 1})
并在$in
运算符中使用子列表作为参数。
然后对于每次迭代,如果该值存在于 db 中,它将返回_id
,我们可以轻松地将其存储在一个空列表中并附加它,并且在该值存在于集合中的情况下,我们将能够获取所有 id。
所以这只是我会做的方式。 不一定是最好的。