2016-12-26 3 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

はい、それです。もう1つ、既存のフィールドが使用されていない場合にエラーを発生させたい場合、どうすればよいですか? – Matias

+0

なぜ例外を発生させる必要がありますか?フィールドが存在しない場合、ドキュメントは更新されません。 – styvane

+0

私は自分の行動に関するフィードバックを持ちたいユーザー用のライブラリを作成しているからです。私は解決策を持っているかもしれません: 最初に '{'fiedname':{'$ exists':True}}'のみの検索クエリをフィルタとして実行します。私cursor.count()は0ですフィールドが不明であり、私は例外を発生させることができます。 – Matias

関連する問題