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