python - 使用数组过滤器更新 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”的数组过滤器
任何帮助是极大的赞赏!
解决方案
推荐阅读
- html - bg_image 的 CSS SWAP 背景位置
- angular - Angular 将文件作为 JSON 中的一个属性发送
- scala - 使用隐式将字符串转换为 ZonedDateTime
- javascript - 同一页面上的多个签名框(签名板)
- python - 为什么你可以在 Python 2 中调整消息框的字体大小,而在 Python 3 中却不能?
- javascript - D3 一般更新 g 元素内的圆圈/文本的模式转换
- c# - 在 ASP.NET MailMessage 类中将 SQL Select 的结果作为 MailMessage 正文发送的想法
- sql-server - sp_execute 在访问不同的数据库/服务器时如何管理凭据?
- c - 为什么使用 malloc 创建的指针赋值会导致分段错误
- javascript - axios请求中未发送正文数据