2016-04-04 8 views
1

私は生産で使用されているUserModelを持っています。ブール値属性(isRegistered)を追加したいと思います。私のプラットフォームに既にいる人にとっては、この新しい属性を真にしたいと思っています。新規ユーザーの場合は、デフォルトではfalseにします。新しいmongooseブール属性。誰でもtrue、デフォルトはfalseです。

私はマングースモデルにdefault: falseを入れることができますが、すでにここにいる人にも当てはまりますか?

ありがとうございます!

+3

新しい属性を追加してmongodbでコレクションを更新してから、新しいモデルでアプリケーションを更新してください) –

答えて

1

新しいアプリケーションを導入するまで待つ必要はありません。次にの配備後にisRegisteredフィールドをtrueに設定すると、そのフィールドセットを持たないすべてのドキュメントを更新するコマンドを実行できます。

db.collection.update({ 
    isRegistered: { $exists: false } 
}, { 
    isRegistered: true 
}, { 
    multi: true 
}) 
+0

ありがとうございます! $は存在しています。値がデフォルトからのものか、すでに設定されているものかをチェックします。 解決策を探している間に発見したことを追加します:デフォルト値を設定すると、作成されたすべてのドキュメントはMongoDbでこの値を持ちます。 – JosselinTD

0

私がお勧めします:

  • 1)の前に、ご使用のプラットフォーム上で登録されたそれぞれの人のためにtrueisRegisteredを更新するために、クエリを実行し、あなたのマングースモデル
  • 2)であなたのisRegistred属性にdefault: falseを追加します特定の日時(たとえば、更新されたモデルを本番環境に配備した瞬間)

このようにして、すべての古いユーザーは既にレジスとしてマークされます将来のものはそうしないのですが。私は、あなたまたはMongoDBが、登録された人物の日付を記録していると仮定しています。あなたのスキーマがこのようなものになるだろう

0

:このため

var UserSchema = new Schema({ 
    name: String, 
    isRegistered: { type: boolean, default: false } 
}); 

、デフォルトでは、すべてのユーザーがfalse

、すでにあなたに挿入された文書であることをisRegisteredフィールドを持っていますUserコレクションには、フィールドisRegisteredは含まれません。コレクション内のすべてのドキュメントを更新して、そのフィールドを含めることができます。

したがって、isRegisteredフィールドをUserコレクションのすべてのドキュメントに追加するには、次の手順を実行します。このようなもの:

var conditions = {}, 
    update = { isRegistered: true }, 
    options = { multi: true }; 

UserSchema.update(conditions, update, options, callback); 
function callback (err, numAffected) { 
    // numAffected is the number of updated documents 
});