2017-03-09 5 views
0

私は自分のモデルで宣言する新しいフィールドを持つコレクション内のすべてのドキュメントを更新しようとしています。このフィールドはbooleanで、デフォルト値はfalseです。新しいフィールドでマングースモデルを更新する

私はこの質問が以前に尋ねられていることは知っていますが、それでも私の問題の解決策を得ることはできません。

すべて私は働かないでください。

ここで私が試した例: 空のクエリを持つ更新メソッド-causeすべてのドキュメントを更新したい場合は、 と空の$ setを変更する必要はないので、追加したフィールドを追加します私のモデルで

User.update({},{},{multi: true},function(err,num) { 
    if (err){ 
    console.log(err); 
    } 
    console.log(num); 
    console.log("all documents were updated with new field) 
    }) 

別の試み:

User.find({},function (err,docs) { 
      async.each(docs,function (doc,cb) { 
       doc.save(function (err) { 
       console.log(err); 
       cb(); 
       }) 
      },function() { 
      console.log("all documents were saved with new field) 
      }) 
     }) 

任意の提案ですか?

+0

データベース内のどのドキュメントがすでにそのフィールドを持っているか持っていないかわからないので、$ set(デフォルト値)でフィールドを明示的に追加する必要がありますそれはデフォルトを設定する必要があります(ただし、Mongoシェルから更新操作を実行する方が簡単です) – robertklep

答えて

1

マングースではフィールドにundefinedの値を設定することはできません。これらのフィールドは文書にはありません。 Mongooseに何かを渡して、新しいフィールドの値に設定する必要があります。

User.update({},{$set: {newField: ''}}......) 

またはnull - -

だからあなたは、空の文字列を設定でき

User.update({},{$set: {newField: null}}.....) 

をしかし、あなたはマングースは、文書に設定するためにいくつかの値を提供する必要があります。マングースのドキュメントから

- -

編集デフォルトで

は、マングースが唯一の新しいドキュメントを作成し、デフォルトを適用します。 update()とfindOneAndUpdate()を使用すると、デフォルトを設定しません。ただし、mongoose 4.xでは、setDefaultsOnInsertオプションを使用してこの動作にオプトインできます。

hereについてさらに読むことができます。

+0

私はこのようにすることができますが、私には役に立ちません。 私は一般的なスクリプトを書く必要がありますモデルに新しいフィールドを追加するたびに実行されます。 – masterG

+0

なぜ、モデルにデフォルト値がある場合、mongooseは未定義の値を保存しようとしますか? – masterG

+0

@masterG申し訳ありませんが、デフォルト値を指定したことに気付きませんでした。編集した回答を確認してください。 –

関連する問題