python - Pymongo 聚合删除数组字段
问题描述
我有一个这样的对象:
{
'_id': 123,
'myArray': [
{'name': 'AAA', 'age': 32, 'nestedArray': [{'field1': 'oreos', 'field2': 'smarties'}]},
{'name': 'BBB', 'age': 23, 'nestedArray': [{'field1': 'mars', 'field2': 'twix'}, {'field1': 'twirl', 'field2': 'aereos'}]}
]
}
我目前使用两个单独的查询来删除我需要的字段:
query_myArray = { '_id': _id }
delete_myArray_element = {
'$pull': {
'myArray' : {'name': myArray_name},
}
}
self.collection.updateOne(query_myArray,delete_myArray_element)
和
query_nestedArray = {
'myArray':
{ '$elemMatch': {
'name': myArray_name,
'nestedArray.field1': match_field1,
}
}
}
update_nestedArray = {
'$pull': {
'myArray.$[].nestedArray': {'field1': match_field1}
}
}
self.collection.update_one(query_nestedArray, update_nestedArray)
出于效率原因,我想在一个查询中完成所有这些操作。我试图$unset
在匹配对象后使用_id
,但我不知道如何匹配数组字段 - 我只想删除单个字段项而不是整个数组。
解决方案
正如Đĵ ΝιΓΞΗΛψΚ所建议的那样,最终将所有事情都作为批量写入查询。
推荐阅读
- regex - 在日志中搜索 json 的正则表达式
- c - 使用 OpenMP 和 MPI 的混合方法不会在具有不同主机数量的集群中使用相同数量的线程
- python - Make总是在每次运行时调用一些依赖规则
- ios - 获取身份验证失败:invalid_token(受众是项目''但应该是项目'')
- arrays - 使用 Verilog 的 $readmemh 系统任务从文件加载方阵数据
- jenkins - 无法将 Splunk 与 Jenkins 集成
- python - 基于索引复制行会使行相乘而不是复制
- http - 带静态文件的 Go Gorilla mux 子路由器
- r - 如何随时避免这种情况(
) “参考更新”? - reactjs - 无法读取 null 的属性 - react.js 状态