Pymongo 使用条件更新文档

Pymongo update a document with a condition

我正在尝试使用 pymongo 更新文档,但没有找到方法。以此文档为例:

{"_id":"mol001",
"deid":["a001", "a003", "a005"],
"count":3}

对于 mol001 的 _id,我正在尝试将标签附加到 deid 并将计数更新为 4:

{"_id":"mol001",
"deid":["a001", "a003", "a005", "b001"],
"count":4}

需要注意的一件事是计数值。如果大于 10,则不会更新文档。以下是我想出的:

    mol = "mol001"
    b001 = "b001"
    try: 
        ## in case mol001 doesn't exist, use upset = True
        count = coll.find_one({"_id": mol}, {"_id": False, "count": 1})['count']
    except:
        count = 0
    if count <= 10:
        coll.update_one({"_id": mol}, {'$push': {'deid': b001}}, upsert=True)
        coll.update_one({"_id": mol}, {"$inc": {"count": 1}}, upsert=True)

这是非常低效的,因为它需要执行一次查询并更新两次。有没有办法用$cond一句话就完成update?

您可以将这两个操作合并为一个更新操作:

coll.update_one({'_id': mol}, {'$push': {'deid': b001}, '$inc': {'count': 1}}, upsert=True)

这是一种方法。

db.collection.update({
  "_id": "mol001",
  "count": {
    "$lte": 10
  }
},
{
  "$push": {
    "deid": "b001"
  },
  "$inc": {
    "count": 1
  }
},
{
  "upsert": true
})

mongoplayground.net 上试用。