mongodb - Pymongo ArrayFilters 更新多个子文档时出错

标签 mongodb pymongo

我的查询是关于更新以数组形式存储的多个子文档。

环境:我的电脑上安装了MongoDB shell版本v3.6.3、python 3.6.9和pymongo 3.6.1。

架构示例:

dept : { "_id" : 1, "dept_name" : "paper", "dept_projs" : 2534, "dept_city" : "Pimpri-Chinchwad",
 "emps": [
         { "salary" : 10000, "city" : "Ajmer", "_id" : 1111, "emp_name" : "Jessica Ali" } ,
         { "salary" : 12000, "city" : "Dhanbad", "_id" : 1112, "emp_name" : "Samuel Sanchez" },
         { "salary" : 8000, "city" : "Gwalior", "_id" : 1113, "emp_name" : "Willie Little" } ,
        ...
          ]
}

查询:我想更新存储在数组中的选定多个子文档。当我在 mongodb 单元中编写此查询时,它可以工作。但是,Python3 显示错误。

db.dept.update({"emps._id":{"$gte":1111,"$lte":1114}},{"$inc":{"emps.$[idx].salary" : 20000}},{"arrayFilters":[{"idx._id":{"$gte":1111, "$lte":1114}}],multi:true})

错误:“TypeError:upsert 必须为 True 或 False”

用于Python代码 **结果

E=db.dept.update({"emps._id":{"$gte":1111,"$lte":1114}},{"$inc":{"emps.$[idx].salary" :20000}},{"arrayFilters":[{"emps._id":{"$gte":1111,"$lte":1114}}],"multi":True})**

错误:pymongo.errors.OperationFailure:BSON字段“update.updates.multi”是错误类型“object”,预期类型“bool”

用于Python代码 **结果

E=db.dept.update({"emps._id":{"$gte":1111,"$lte":1114}},{"$inc":{"emps.$[idx].salary" : 20000}},False, True,{"arrayFilters":[{"emps._id":{"$gte":1111,"$lte":1114}}]})**

最佳答案

如果你查看pymongo的源码,你会发现update函数不会接收任何关于arrayFilters的参数,因此您必须使用 update_one,它将接受名为 array_filters 的可选参数:

db.dept.update_one(
    {"emps._id" : {"$gte" : 1111, "$lte" : 1114}},
    {"$inc" : {"emps.$[idx].salary" : 20000}}, 
    upsert=True,
    array_filters=[{"idx._id" : {"$gte" : 1111,  "$lte"  : 1114}}]
)

关于mongodb - Pymongo ArrayFilters 更新多个子文档时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60862120/

相关文章:

python - 为什么 2700 条记录(每条 320KB)需要 30 秒才能获取?

Mongodb 副本集(写入辅助)

mongodb - Mongoid::Versioning - 如何检查以前的版本?

python - 为什么 pymongo 在 insert_one 操作后更改我的变量?

mongodb:计算唯一数组元素

python - MongoDB 和 Python - 带列表的字典

python - python3 flask 应用程序中的 pymongo 导入错误

mongodb - meteor 无法在 Mongo.Collection 中通过 id 找到

javascript - Nodejs Express MongoClient 集合检索

javascript - 如何检索拆分的值并将它们放入单独的变量中