我正在使用pymongo" insert_one", 我想阻止插入两个文件相同的"名称"属性。
谢谢!
我的代码:
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
答案 0 :(得分:5)
有一个答案可以防止在mongoDB中添加重复文件How to stop insertion of Duplicate documents in a mongodb collection。
我们的想法是update
与upsert=True
而不是insert_one
一起使用。
因此,插入pymongo的代码将是
db[collection_name].update(document,document,upsert=True)
答案 1 :(得分:3)
您需要创建一个索引,以确保该名称在该集合中是唯一的
e.g。
db.heights.create_index([('name', pymongo.ASCENDING)], unique=True)
有关详细信息和说明示例,请参阅the official docs
答案 2 :(得分:0)
这是你的文件
doc = {"key":val}</p>
然后,使用 $set 来更新您的文档
update={"$set":doc} # 在更新中使用 $set 很重要
db[collection_name].update(document, update, upsert=True)