mongodb 如何在pymongo中防止重复

ckx4rj1h  于 2023-06-05  发布在  Go
关注(0)|答案(4)|浏览(466)

我正在使用pymongo“insert_one”,我想防止插入两个具有相同“name”属性的文档。
1.一般如何防止重复?
1.我如何配置它的一个特定的属性,如名称?
谢谢!
我的代码:

client = MongoClient('mongodb://localhost:8888/db')
db = client[<db>]
heights=db.heights

post_id= heights.insert_one({"name":"Tom","height":2}).inserted_id

try:
    post_id2 = heights.insert_one({"name":"Tom","height":3}).inserted_id

except pymongo.errors.DuplicateKeyError, e:
    print e.error_document

print post_id
print post_id2

输出:
56aa7ad84f9dcee972e15fb7
56aa7ad84f9dcee972e15fb8

cig3rfwq

cig3rfwq1#

一般来说,在How to stop insertion of Duplicate documents in a mongodb collection上有一个防止在mongoDB中添加重复文档的答案。
这个想法是使用updateupsert=True,而不是insert_one。所以当插入pymongo的代码时

db[collection_name].update(document,document,upsert=True)
ukxgm1gy

ukxgm1gy2#

您需要创建一个索引,以确保名称在该集合中是唯一的
例如

db.heights.create_index([('name', pymongo.ASCENDING)], unique=True)

请参阅官方文档以了解更多详细信息和澄清示例

k5ifujac

k5ifujac3#

这是你的文件

doc = {"key": val}

然后,对文档使用$set进行更新

update = {"$set": doc} # it is important to use $set in your update
db[collection_name].update(document, update, upsert=True)
vi4fp9gy

vi4fp9gy4#

我自己也有类似的问题,但找不到适合我的解决方案。
最后我想到了
1.在收集的数据中寻找我想放进去的确切数据
1.计算结果的数量
1.如果结果数为1,则数据已经存在,如果结果数为0,则数据不存在。
这是我一直在寻找的工作,也许iz帮助别人:

# dummy data we want to insert to MongoDB
json_data = '{"location": "Berlin","date": 2023,"temperature": 19, "clouds": true}'

# Connect to collection
db = client[event["database"]]
collection = db[event["collection"]]

# Check if the data already exists
cursor = collection.find(json_data)
# If no objects are returned store the data
if(len(list(cursor)) == 0): collection.insert_one(json_data)

相关问题