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