2016-04-18 15 views
1

条件に応じて、コレクション内の一部のフィールドを更新しようとしています。 truefalseにそう条件付きMongoDBの更新

これは、私がこのように更新するように条件を追加したい条件

db.consent.update(
{}, //match all 
{ 
    $set: { 
     "active": true 
    } 
}, 
{ 
    multi: true, 
} 

) 

なしの更新が

条件がある場合、私はtrueにフィールドactiveを設定したいです。

db.consent.update(
{}, 
$cond: { 
    if: { 

     $eq: ["_id", ObjectId("5714ce0a4514ef3ef68677fd")] 

    }, 
    then: { 
     $set: { 
      "active": true 
     } 
    }, 
    else: { 
     $set: { 
      "active": false 
     } 
    } 
}, 
{ 
    multi: true, 
} 

https://docs.mongodb.org/manual/reference/operator/update-field/によれば、更新のための演算子は$condではありません。

このアップデートを1つのコマンドとして実行するための私のオプションは何ですか?

+0

可能な重複http://stackoverflow.com/questions/5540103/mongodb-条件付きアップセーブまたはアップデート) – BanksySan

答えて

1

できません。

Mongoは、更新ステートメントでフィールド、条件文などをコンパイルすることはサポートしていません。

+0

これには回避策がありますか? – q99

+0

私が知っているわけではありませんが、2回の更新を行うだけです。真理のためのもの、偽物のためのもの。 – BanksySan

3

あなたはMongoDBのバージョンを持っている場合は、条件付きでfindAndModify()またはfindOneAndUpdate()を使用してMongoDBのドキュメントを更新することができ3.2+

[MongoDBは、条件付きのアップサートまたは更新](の
+0

ドキュメントから 'findAndModifyコマンドは単一のドキュメントを変更して返します'。ですから、これは1つのドキュメントにのみ有効ですが、コレクション全体を更新する必要があります。だから私は基本的に固執していると思う:1)2フェーズコミット 2)2クエリ 3)この1つについての情報を保持するいくつかの他のドキュメント 4)実装を変更する – q99