【问题标题】:MongoDB a quickest way to insert a record if it does not exist? [duplicate]如果记录不存在,MongoDB 是插入记录的最快方法吗? [复制]
【发布时间】:2016-07-02 09:18:18
【问题描述】:

我想在 MongoDB 数据库中插入一条记录,但前提是该记录尚不存在。 有人告诉我,这段代码在性能方面并不是最优的:

if db.foo.find(record).count() == 0:
    db.foo.insert(record)

怎样做最快?

【问题讨论】:

    标签: python mongodb mongodb-query nosql


    【解决方案1】:

    如果您只想确保基于特定键只能存在一条记录,请在该键上创建唯一索引。这将确保唯一性。 任何插入具有相同键的记录的尝试都将失败。您的密钥可以是例如 SSN。

    【讨论】:

      【解决方案2】:

      更新时,使用 upsert 标志:

      db.foo.update_one(filter, updates_dict, upsert=True)
      

      工作示例:

      db.things.update_one({'thing':'apple'}, {'$set':{'color':'red'}}, upsert=True)
      

      这将搜索带有'thing': 'apple' 的第一个文档并将其颜色更新为红色。如果没有找到文档,它将使用这两个参数创建一个。

      请参阅文档:http://api.mongodb.org/python/current/index.html

      【讨论】:

      • 谢谢,但我得到:文件“foo.py”,第 35 行,在 db.foo.update(record, upsert=True) 类型错误:update() 至少需要 3 个参数( 3给定)
      • 更新已弃用,我将编辑为 update_one
      • 假设我不是人类而是预处理器。 db.foo.insert(record) 如何转换为 db.foo.update_one(filter, record, upsert=True)?什么是过滤器?
      • 根据文档:过滤器:匹配要更新的文档的查询。
      猜你喜欢
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      • 2014-04-04
      相关资源
      最近更新 更多