我想在MongoDB数据库中找到一个嵌套集合,并从Pymongo更新它。以下是我的文档树的结构:
{
"name_list" : [
{
"_id" : ...,
"name" : "Joe Edwards",
"aliases" : [
"Allen Dingus",
"Edward McPickles"
]
},
...
]
}
我想访问的集合是aliases
。目前,我的代码使用find()
函数在name_list
中使用“Joe Edwards”的name
键找到元素。我得到的是一个游标对象;这是预期的。但是,我无法找到访问aliases
集合并更新它的方法(我正在寻找类似db.name_list.find(...)[0].aliases.update(...)
的内容,以便我可以直接操作aliases
。
我已经查看了PyMongo文档和Stack Exchange上的很多帖子,但我发现没有类似的东西。我的临时修复只是访问name_list
并更新属于“Joe Edwards”的整个文档,但它并不是很优雅。有人可以帮忙吗?
感谢。
答案 0 :(得分:0)
MongoDB尝试将驱动程序的运算符(包括Pymongo)与mongo
shell的运算符对齐。在最好的情况下,mongo
shell操作看起来与命令的Pymongo版本完全相同。因此,如果您找不到您需要的运营商,您可能会在Operator documentation page
关于您的问题,根据您的目的,您可以选择以下几种方式:
更新现有数组元素
可以使用$
update positional operator:
db.name_list.update_one({'aliases':'Allen Dingus'}, {'$set': {'aliases.$': 'Alias 1'}})
请注意aliases.$
操作,该操作将更新别名“Allen Dingus”并将其替换为“Alias 1”。使用您的示例文档,这将导致:
{
"_id": ...,
"name": "Joe Edwards",
"aliases": [
"Alias 1",
"Edward McPickles"
]
}
添加新数组元素
可以使用$push
operator或$addToSet
operator:
db.test.update_one({'aliases':'Allen Dingus'}, {'$push': {'aliases': 'Alias 2'}})
这将搜索别名“Allen Dingus”并将新条目添加到数组中。使用您的示例文档,这将导致:
{
"_id": ...,
"name": "Joe Edwards",
"aliases": [
"Allen Dingus",
"Edward McPickles",
"Alias 2"
]
}