Pymon go агрегация удалить поле массива - PullRequest
1 голос
/ 06 марта 2020

У меня есть такой объект:

{
  '_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, но я не знаю, как сопоставить поля массива - я хочу удалить только один элемент поля, а не весь массив.

1 Ответ

1 голос
/ 09 марта 2020

В соответствии с предложением Đĵ ΞΗιΓΞΗΛ 100 , в итоге все выполнялось как массовый запрос.

...