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)