Python Pymongo聚合移除数组字段
我有一个这样的物体:Python Pymongo聚合移除数组字段,python,mongodb,pymongo,pymongo-3.x,Python,Mongodb,Pymongo,Pymongo 3.x,我有一个这样的物体: { '_id': 123, 'myArray': [ {'name': 'AAA', 'age': 32, 'nestedArray': [{'field1': 'oreos', 'field2': 'smarties'}]}, {'name': 'BBB', 'age': 23, 'nestedArray': [{'field1': 'mars', 'field2': 'twix'}, {'field1': 'twirl', 'field2':
{
'_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)
及
出于效率原因,我想在一个查询中完成这一切。在匹配
\u id
上的对象后,我尝试使用$unset
,但我不知道如何匹配数组字段-我只想删除单个字段项,而不是整个数组。如所建议,最后做的每件事都是一个bulkwrite查询。不要认为在同一个数组字段上做两个更新操作是可能的。但是,您可以尝试将这两种操作结合起来。
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)