我想在我的MongoDB数据库中找到一个嵌套集合,并从Pymongo更新它。下面是我的文档树的结构:
{
"name_list" : [
{
"_id" : ...,
"name" : "Joe Edwards",
"aliases" : [
"Allen Dingus",
"Edward McPickles"
]
},
...
]
}
我希望访问的集合是aliase
。目前,我的代码使用find()
函数来定位name_list
中的元素,name
键为“Joe Edwards”。我得到的回报是一个光标对象;这是意料之中的。但是,我找不到访问aliase
集合并更新它的方法(我正在寻找类似db.name_list.find(…)[0]。aliases.update(…)
这样我就可以直接操作aliase
)。
我已经查看了PyMongo文档和堆栈交换上的许多帖子,但我没有发现任何类似的内容。我的临时修复只是访问name_list
并更新属于“Joe Edwards”的整个文档,但它并不真正优雅。有人可以帮忙吗?
谢谢。
MongoDB试图将驱动程序(包括Pymongo)的操作符与< code>mongo shell的操作符对齐。在最好的情况下,< code>mongo shell操作看起来与命令的Pymongo版本完全一样。因此,如果您找不到您需要的操作符,您可以在操作符文档页面中找到它
关于你的问题,根据你想做什么,有几个选项可供你选择:
更新现有数组元素
这可以使用<code>$
db.name_list.update_one({'aliases':'Allen Dingus'}, {'$set': {'aliases.$': 'Alias 1'}})
请注意<code>别名$ 操作,该操作将更新“Allen Dingus”的别名,并将其替换为“别名1”。对于示例文档,这将导致:
{
"_id": ...,
"name": "Joe Edwards",
"aliases": [
"Alias 1",
"Edward McPickles"
]
}
添加新的数组元素
这可以使用$ush
运算符或$addToSet
运算符来完成:
db.test.update_one({'aliases':'Allen Dingus'}, {'$push': {'aliases': 'Alias 2'}})
这将搜索别名“艾伦·丁格斯”,并将新条目添加到数组中。对于您的示例文档,这将导致:
{
"_id": ...,
"name": "Joe Edwards",
"aliases": [
"Allen Dingus",
"Edward McPickles",
"Alias 2"
]
}
我正在开发基于Microsoft Azure的应用程序,使用Azure Cosmos触发器从集合中获取更改提要。我在单个集合中嵌套了记录。在UI中,用户可以修改嵌套记录。现在,我的要求是获取有关从UI修改的记录的信息,但cosmos触发器将返回集合中的所有数据,而我希望从嵌套集合中获取单个修改的记录。如果可行,对如何做到这一点有何建议?返回整个集合将花费太多时间来加载UI。
问题内容: 我对脚本使用批量更新以更新嵌套字段,但这非常慢: 您知道另一种可能更快的方法吗? 为了不对每次更新重复执行脚本,似乎可以存储该脚本,但是我找不到保持“动态”参数的方法。 问题答案: 与性能优化问题一样,由于有许多可能导致性能不佳的原因,因此没有唯一的答案。 在您的情况下,您正在批量请求。当执行,该文件实际上是被重新索引: …要更新文档就是要对其进行检索,更改,然后为整个文档重新编制索引
问题内容: 我使用此代码从Jhonny的Question中的json 对象中找到了所需的部分 数据样本 查找功能 像这样使用: 此代码是从源代码中选择匹配的片段。但是我想要的是用新值更新源对象并检索更新的源对象。 我想要类似的东西 我的密码 如果我给定但如果我将代码更改为未定义的更新,则此方法有效。 为什么呢? 问题答案: 您忘记在嵌套调用中传递newValue
问题内容: 我在Scala和Java之间遇到编译问题。 我的Java代码需要一个 我的scala代码有一个 我收到编译错误: 似乎scala.collection.JavaConversions不适用于嵌套集合,即使Vector可以隐式转换为Iterable。除了遍历scala集合并手动进行转换之外,我还能做些什么使这些类型起作用? 问题答案: 应该弃用恕我直言。您最好使用来明确说明转换的时间和地
我正在尝试使用实体图来触发加载的惰性集合,但不幸的是,实体图也会触发所有嵌套集合。我正在使用spring-data-jpa-entity-graph库在运行时创建实体图。 带有 JPA 存储库的 Spring 服务: 在这种情况下,服务还为每辆车返回零件收集,但我只想获取每个品牌的车辆收藏的品牌列表。 我们如何在第一级触发加载懒惰集合(仅限品牌车辆-没有车辆零件)?
我有三个实体主题、主题和类别。在检索包含主题和主题的所有类别时,如何预取每个实体的id和名称列?我不需要其他字段,因为它会影响性能。