首页 > 解决方案 > 使用数组过滤器更新 MongoDB

问题描述

我有一个想要添加的嵌套数组,但我遇到了困难。如果它不存在,我的目标是附加到该数组,如果存在,它将更改其中的信息。

例如,我想用 'foo' 的标识 ('id4') 从 '...' 到 '!!!' 编辑 'arr4' 中字典的内容。

这是在这里使用 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:在路径“arr1.$[element1].arr2.$[element2].arr3.$[elemenet3]”中找不到标识符“element1”的数组过滤器

任何帮助是极大的赞赏!

标签: pythonpython-3.xmongodbpymongo

解决方案


推荐阅读