Mongodb удалить объект из вложенного массива, используя $ pull, не работает, используя pymongo - PullRequest
0 голосов
/ 27 марта 2020
   [
    {
      "reports": [
    {
      "imageid": 1888,
      "name": "hello"
    },{
      "imageid": 2344,
      "name": "hello"
    }
      ],
      "report_name": "a"
    },{
    "reports": [
    {
      "imageid": 1888,
      "name": "hello"
    },{
      "imageid": 2344,
      "name": "hello"
    }
      ],
      "report_name": "b"
    }
   ]

Вот моя структура mongodb. Я хочу удалить объект из массива отчетов, где imageid равен 1888. Например, в первых отчетах есть 2 объекта, после удаления imageid 1888 будет только один отчет (только 2344 объекта imageid).

db.reports.update(
  { },
  { $pull: { reports: { imageid: 1888 } } },
  { multi: true }
)

Этот код я пытаюсь в оболочке mongodb, и она работает нормально. Но ниже код использует python -pymon go. Этот фрагмент кода не работает.

mycol.update(
        {}, 
        { "$pull": { "reports": {"imageid": imageid} } },
        {"multi":"true"}
       )

Вот ошибки, которые я получаю при выполнении запроса из python с использованием pymon go

  File "/home/fractaluser/Desktop/Dev/consumerhubfractal_rb/env/lib/python3.5/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/fractaluser/Desktop/fractal/consumerhubfractal_rb/report/views.py", line 45, in report
    {"multi":"true"}
  File "/home/fractaluser/Desktop/Dev/consumerhubfractal_rb/env/lib/python3.5/site-packages/pymongo/collection.py", line 2535, in update
    collation=collation)
  File "/home/fractaluser/Desktop/Dev/consumerhubfractal_rb/env/lib/python3.5/site-packages/pymongo/collection.py", line 732, in _update
    common.validate_boolean("upsert", upsert)
  File "/home/fractaluser/Desktop/Dev/consumerhubfractal_rb/env/lib/python3.5/site-packages/pymongo/common.py", line 132, in validate_boolean
    raise TypeError("%s must be True or False" % (option,))
TypeError: upsert must be True or False

Я попытался добавить upsert = Верно, но все еще есть другая ошибка.

Пожалуйста, посмотрите

1 Ответ

0 голосов
/ 27 марта 2020
mycol.update( { }, { "$pull": { "reports": {"imageid": int(imageid)} } }, multi=True )
...