如何防止pymongo重复

时间:2016-01-28 20:38:52

标签: python mongodb pymongo

我正在使用pymongo" insert_one", 我想阻止插入两个文件相同的"名称"属性。

  1. 我如何一般防止重复?
  2. 如何为名称等特定属性配置它?
  3. 谢谢!

    我的代码:

    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

3 个答案:

答案 0 :(得分:5)

有一个答案可以防止在mongoDB中添加重复文件How to stop insertion of Duplicate documents in a mongodb collection

我们的想法是updateupsert=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)