2017-01-09 9 views
0

内のすべてのドキュメントの更新ドキュメント構造Iは約30万のエントリを有し、その文書がNodejs-するMongoDB:コレクション

{ 
    "_id" : ObjectId("5xxx85"), 
    "user_id" : "1", 
    "name" : "test", 
    "user_private" : "0" 
} 

のように見えるコレクションdataを持っている今、私はこのコレクション内のすべてのドキュメントを更新すると、新しい文書は、私はuser_private = 0が、その後is_private as privateを置くか、他is_private as not_privateを置けば、新しいフィールドを追加するフィールド名を更新して確認する必要がありますすなわち

{ 
    "_id" : ObjectId("5xxx85"), 
    "rid" : "1", 
    "user_name" : "test", 
    "is_private" : "private", 
    "is_moderator" : "true", 
    "amount" : "11111" 
} 

のようになります。

私はちょっと新しいので、どうすれば効率的にこれを行うことができますか?エントリは300kです。 いくつかの方法を提案してください。疑似コードは本当に役に立ちます。

答えて

1

文書をフィルタ条件に更新するには以下の擬似コードをチェックし、link to read moreに従ってください。あなたはuser_private

db.messages.updateMany([ 
    { "user_private" : 0 }, // filter. 
    { $set: { 
     "user_private" : "private", 
     "is_moderator" : "true" 
    } 
    }, // update. 
    { 
    upsert: true 
    } 
]); 

upsertsのための既存の値を持っている必要があります

は - 何の書類が設けられたフィルタおよび更新パラメータに基づいてフィルタに一致するフィルタやアップデートの文書と一致しない場合は、新しいドキュメントを作成します。

+0

私は新しいフィールドを追加し、既存のフィールドの名前を変更する必要はありません。 – iamsaksham

+0

これも実行できます – akinjide

+0

質問を更新しました。特定のフィールドの名前も変更する必要があります。そして、私はすべての文書のためにそれを繰り返す必要があります。私にとって本当に混乱しています。 – iamsaksham

関連する問題