Pymongo-快速搜索并保留重复项

问题描述 投票:0回答:2

我的MongoDB中有一些数据-很多数据。而且我想用pymongo添加新数据,但不要追加基于phone_number在数据库中已经存在的数据。我正在使用此代码,但是它只是一个循环,所以它的运行速度很慢……

connected_db = self.main_mongo_terema # Connect to DB
data_to_insert = []
try:
    collection = connected_db['terema_data'] # Connect to Collection
except:
    self.log("Cant connect to DB")
try:
    for dicts_ in data: # list of dicts
        for key, val in dicts_.items():
            if key == "phone_number":
                match = collection.find({}, {"phone_number": val })
                for x in match:
                    if x:       
                        continue
                    else:
                        data_to_insert.append(dicts_)
except Exception as e:
    self.log(f"Loop problem - {str(e)}")
try:
    collection.insert_many(data_to_insert)

# Empty list
except TypeError:
    pass
python python-3.x pymongo
2个回答
0
投票

创建唯一索引,这样就不必检查数字是否存在。

通过以下命令创建索引:

collection.createIndex( { "phone_number": 1 }, { unique: true } )

PS:您只需执行一次。之后,数据库中的所有phone_number将始终是唯一的。

之后,您可以直接插入data对象。您无需检查该值是否唯一,mongodb将为您处理该值。

collection.insert_many(data)

0
投票

您正在使用三个嵌套循环,因此简单来说,时间复杂度将为O(n^3),如果有更多数据,它将像地狱一样。

您可以使用bulk_write()加快插入操作。

bulk_write()
© www.soinside.com 2019 - 2024. All rights reserved.