带阵列过滤器的MongoDB更新

时间:2018-05-12 17:54:58

标签: python python-3.x mongodb pymongo

我有一个我想添加的嵌套数组,但我遇到了困难。我的目标是在不存在的情况下附加到此数组,如果不存在,则会更改其中的信息。

例如,我想在' arr4'内编辑字典的内容。使用' foo'的标识(' id4')来自' ...'到了' !!!'。

这是使用PyMongo设置的:

diction = {
  "arr1": [
    {
      "id1": "abc",
      "someInfo1": "...",
      "someInfo2": "...",
      "someInfo3": "...",
      "someInfo4": "...",
      "arr2": [
        {
          "id2": "ijk",
          "arr3": [
            {
              "id3": "xyz",
              "someInfo1": "...",
              "someInfo2": "...",
              "arr4": [
                {
                "id4": "foo",
                "someInfo": "..."
                },
                {
                "id4": "bar",
                "someInfo": "..."
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

import pymongo
from pymongo import MongoClient

client = MongoClient()
db = client['pymongo_test2']
db.posts.insert_one(diction)

为了访问这些数组,我想我会使用数组过滤器,所以我试过

id1 = 'abc'
id2 = 'ijk'
id3 = 'xyz'
id4 = 'foo'

db.posts.update_one({}, {'$set': {'arr1.$[element1].arr2.$[element2].arr3.$[elemenet3].arr4': {'id4': 'foo', 'someInfo': '!!!'}, 'arrayFilters': {'element1.id1': id1, 'element2.id2': id2, 'elemenet3.id3': id3}}}, True)

但是我收到了错误:

  

pymongo.errors.WriteError:找不到标识符' element1'的数组过滤器在路径' arr1。$ [element1] .arr2。$ [element2] .arr3。$ [elemenet3]'

非常感谢任何帮助!

0 个答案:

没有答案