#python #mongodb #aggregate #pymongo
Вопрос:
Я использую библиотеку pymongo в Python для обновления определенных записей в моем MongoDB, специально используя функцию db.update_one (), которая ранее работала с конвейером агрегации $set, но теперь не работает при использовании $addFields. Я пытаюсь вставить запись: 'Client Facing': ['No']
в объект:
{
'Content Format': ['Presentation'],
'Category': ['Systems w/TPS'],
'Offering Market': ['Enterprise Linux Market'],
'Offering Portfolio': ['Enterprise Linux'],
'Offering Name': ['HANA excl L Systems - POWER9 H924 Scale-Out'],
'Keywords': ['SAP'],
'Language': ['English'],
'Additional Information': ['prepare-atl'],
'Organization Owner': ['Technology'],
'Brand': ['Cognitive Systems'],
'Content Owner Group': ['Technology - Systems']
}
Поэтому я использовал update_one() с параметрами: {‘сейсмический идентификатор’: 12345} (это фильтр), и
{'$addFields': {'seismic_properties_obj.Client Facing': ['No']}}
Однако, когда я это делаю, это завершается ошибкой:
pymongo.errors.WriteError: Unknown modifier: $addFields. Expected a valid update modifier or pipeline-style update specified as an array, full error: {'index': 0, 'code': 9, 'errmsg': 'Unknown modifier: $addFields. Expected a valid update modifier or pipeline-style update specified as an array'}
Комментарии:
1. вы можете использовать $addFields только в конвейере обновления с агрегацией, можете ли вы показать весь свой запрос?
2. @turivishal мой полный запрос-это просто метод update_one, который выглядит следующим образом: « DB[‘активы’].update_one({‘сейсмический идентификатор’: 12345}, {‘$addFields’: {‘сейсмические свойства.Перед клиентом’: [‘Нет’]}}) «
3. как я уже говорил в первом разделе comnet $addFields-это этап агрегации, вы можете использовать $set здесь.
Ответ №1:
вы можете использовать следующий фрагмент кода
DB['assets'].update_one(
{'seismic_id': 12345},
{'$set':
{'seismic_properties_obj.Client Facing': 'No'}
}
)
Это позволит найти запись seismic_id
= 12345, затем добавить свойство seismic_properties.Client Facing
и установить его в 'No'
Примечание: В этом случае $addField
не является допустимым оператором, поскольку он используется в рамках агрегации. Вместо этого использование $set
позволяет добавлять/обновлять определенные ключи без обновления всего документа.