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 上试用。
我正在尝试使用 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 上试用。