2016-12-26 7 views
1

Я использую драйвер PyMongo, и у меня есть проблема с методом update_many.Отключить создание новых полей с помощью метода update_many

Если я попытаюсь обновить значение несуществующего поля в документе, это поле будет создано. Я хотел бы, чтобы метод вызывал ошибку.

Поскольку я разрабатываю свою собственную библиотеку, я могу написать код, посвященный этой проблеме. Поэтому меня интересуют все решения, которые вы можете мне предоставить.

+0

Как об обновлении, только если поле существует? – styvane

+0

Благодарим вас за ответ. Как я могу узнать, существует ли поле? – Matias

+1

Итак, вы хотите обновить, только если поле ['$ exists'] (https://docs.mongodb.com/manual/reference/operator/query/exists/). Правильно? – styvane

ответ

1

Вы хотите обновить только документы, содержащие данное поле.

Для этого вам необходимо использовать оператор запроса $exists в ваших критериях фильтра, чтобы выбрать только те документы.

db.collection.update_many({'fiedname': {'$exists': True}}, update_document) 

Если вы хотите поднять исключение, если документ не соответствует вашим критериям запроса, лучший способ сделать это, чтобы проверить значение modified_count или matched_count после вашего запроса. Если он равен 0, вы вызываете свое исключение.

Все вместе взятые:

update_result = db.collection.update_many({'fiedname': {'$exists': True}}, update_document) 
if update_result.modified_count == 0: # you can also use matched_count 
    # raise your exception or what do whatever you want here. 
+0

Да что это. Еще одна вещь, как мне сделать, если я хочу поднять ошибку, если используется не существующее поле? – Matias

+0

Зачем вам нужно возбуждать исключение? Если поле не существует, документ не будет обновляться. – styvane

+0

, потому что я пишу библиотеку для пользователей, которые хотят получать отзывы о своих действиях. У меня может быть решение: сначала выполните поиск с помощью только '{'fiedname': {'$ exists': True}}' в качестве фильтра. I cursor.count() равно 0, тогда поле неизвестно, и я могу создать исключение. – Matias