PyMongoドライバを使用していて、update_many
メソッドに問題があります。update_manyメソッドで新しいフィールドの作成を無効にする
ドキュメント上に存在しないフィールドの値を更新しようとすると、このフィールドが作成されます。私は代わりにエラーを発生させるメソッドをしたいと思います。
私自身のライブラリを開発しているので、私はこの問題専用のコードを書くことができます。したがって私はあなたが私に提供できるすべてのソリューションに興味があります。
PyMongoドライバを使用していて、update_many
メソッドに問題があります。update_manyメソッドで新しいフィールドの作成を無効にする
ドキュメント上に存在しないフィールドの値を更新しようとすると、このフィールドが作成されます。私は代わりにエラーを発生させるメソッドをしたいと思います。
私自身のライブラリを開発しているので、私はこの問題専用のコードを書くことができます。したがって私はあなたが私に提供できるすべてのソリューションに興味があります。
必要なのは、指定したフィールドを含むドキュメントのみを更新することです。
これを行うには、フィルタ条件で$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.
はい、それです。もう1つ、既存のフィールドが使用されていない場合にエラーを発生させたい場合、どうすればよいですか? – Matias
なぜ例外を発生させる必要がありますか?フィールドが存在しない場合、ドキュメントは更新されません。 – styvane
私は自分の行動に関するフィードバックを持ちたいユーザー用のライブラリを作成しているからです。私は解決策を持っているかもしれません: 最初に '{'fiedname':{'$ exists':True}}'のみの検索クエリをフィルタとして実行します。私cursor.count()は0ですフィールドが不明であり、私は例外を発生させることができます。 – Matias
どう更新に関する場合にのみ? – styvane
お返事ありがとうございます。フィールドが存在するかどうか私はどのように知ることができますか? – Matias
フィールド['$ exists'](https://docs.mongodb.com/manual/reference/operator/query/exists/)の場合にのみ更新します。 – styvane