MongoDB 提示符中使用数组过滤器的手动工作命令需要等效的 Pymongo 命令

Need equivalent Pymongo command for for the manual working command in MongoDB prompt using array filters

手动工作命令需要 Pymongo (Python Flask) 等效命令:

db.UserInfoCollection.update({ "id" : "6efb83dc365fb6bdb3b78a9a"},
                             {$set: {'testArrayLevel1.$[i].testArrayLevel2.$[j].status':"registered"}},
                             {arrayFilters:[{"i.user_name":"test_user1"}, {"j.user_type": "basic"}]})

以上命令在手动 Mongodb 提示符下更新了数据库,没有任何问题。

尝试了以下(更新和 update_one 以及 arrayFilters 和 array_filters):

mongo.db.UserInfoCollection.update_one({'id': id}, {"$set": {'testArrayLevel1.$[i].testArrayLevel2.$[j].status':"registered"}},{"array_filters":[{"i.user_name":user_name}, {"j.user_type": user_type}]}, upsert=False)

此命令在 Python Flask 代码中执行时出错:

**TypeError: update_one() got multiple values for argument 'upsert'**
mongo.db.UserInfoCollection.update_one({'id': id}, {"$set": {'testArrayLevel1.$[i].testArrayLevel2.$[j].status':"registered"}},{"array_filters":[{"i.user_name":user_name}, {"j.user_type": user_type}]})

此命令在 Python Flask 代码中执行时出错: TypeError: upsert 必须是 True 或 False

我在 Pymongo 中的命令结构中缺少工作命令的内容。 在此感谢任何帮助。

在 pymongo 中,你必须将 array_filters 作为单独的参数传递;例如

mongo.db.UserInfoCollection.update_one({'id': id},
                                       {"$set": {'testArrayLevel1.$[i].testArrayLevel2.$[j].status': "registered"}},
                                       array_filters=[{"i.user_name": user_name}, {"j.user_type": user_type}],
                                       upsert=False)

参考:pymongo documentation