$addFields для конкретной записи с использованием MongoDB в Python

#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 позволяет добавлять/обновлять определенные ключи без обновления всего документа.