0

手动工作命令需要 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 和 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 must be True or False

我在 Pymongo 中的工作命令中缺少一些东西。任何帮助在这里表示赞赏。

4

1 回答 1

1

在 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 文档

于 2020-07-10T21:02:49.117 回答