首页 > 解决方案 > 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,但我不知道如何匹配数组字段 - 我只想删除单个字段项而不是整个数组。

标签: pythonmongodbpymongopymongo-3.x

解决方案


正如Đĵ ΝιΓΞΗΛψΚ所建议的那样,最终将所有事情都作为批量写入查询。


推荐阅读