Pymon go ошибка для ArrayFilters для обновления нескольких вложенных документов - PullRequest
1 голос
/ 26 марта 2020

Мой запрос касается обновления нескольких вложенных документов, хранящихся в формах массива.

Среда: на моем компьютере установлена ​​версия оболочки MongoDB v3.6.3, python 3.6.9 и pymon go 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 must be True or 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 field 'update.updates.multi' is the wrong type 'object', expected type '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}}]})**

1 Ответ

0 голосов
/ 26 марта 2020

Вы должны написать свой запрос следующим образом:

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

Примечание: я предоставил только синтаксическую коррекцию, которая связана с вопросом об ArrayFilters в pymon go.

...