Требуется эквивалентная команда Pymon go для ручной работы в командной строке MongoDB с использованием фильтров массива - PullRequest
0 голосов
/ 10 июля 2020

Требуется команда, эквивалентная Pymon go (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 должен быть True или False

Что-то отсутствует в формировании моей команды в Pymon go для рабочая команда. Здесь приветствуется любая помощь.

1 Ответ

1 голос
/ 11 июля 2020

В pymon go вы должны передать 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)

Ссылка: pymon go документация

...