2016-04-04 8 views
1

Ich habe ein UserModel, in der Produktion verwendet. Ich möchte ein boolesches Attribut (isRegistered) hinzufügen. Für Leute, die bereits auf meiner Plattform sind, möchte ich, dass dieses neue Attribut wahr ist. Für neue Benutzer möchte ich, dass es standardmäßig falsch ist.New mongoose boolean Attribut, jeder bei true, Standard ist falsch

Wie kann ich default: false zu meinem Mungo-Modell setzen, aber wahr für Leute, die schon hier sind?

Danke!

+3

aktualisiert zuerst Ihre Sammlung in mongodb durch das neue Attribut hinzufügen und dann Ihre Anwendung mit neuem Modell aktualisieren;) –

Antwort

1

Sie müssen warten, bis Sie Ihre neue Anwendung bereitstellen. Dann nach, die Sie bereitgestellt haben, und Sie setzen das Feld isRegistered auf True, können Sie den Befehl ausführen, um alle Dokumente zu aktualisieren, die dieses Feld nicht enthalten.

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

Dank! $ exists macht die Tricks hier. Es wird überprüft, ob der Wert nur vom Standardwert oder bereits festgelegt ist. Ich füge eine Sache hinzu, die ich bei der Suche nach einer Lösung entdecke: Wenn Sie einen Standardwert festlegen, haben alle erstellten Dokumente diesen Wert in MongoDb und nicht nur durch Mongoose – JosselinTD

0

Ich würde vorschlagen:

  • 1)
  • 2) Führen Sie eine Abfrage ein default: false zu Ihrem isRegistred Attribute in Ihrem Mongoose Modell hinzufügen isRegistered zu true für jede Person zu aktualisieren, bevor ein auf Ihrer Plattform registriert bestimmtes Datum und Uhrzeit (z. B. in dem Moment, in dem Sie Ihr aktualisiertes Modell in Produktion genommen haben)

Auf diese Weise werden alle Ihre alten Benutzer als bereits regis markiert Die Zukunft wird es nicht tun. Ich gehe davon aus, dass Sie oder MongoDB das Datum verfolgt, an dem sich eine Person angemeldet hat.

0

Ihr Schema würde wie folgt sein:

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

auf diese Due, standardmäßig alle Benutzer haben isRegistered Feld false

und die Dokumente, die bereits eingeführt wurden Ihre User Sammlung würde das Feld isRegistered nicht haben. Sie können also alle Dokumente in Ihrer Sammlung aktualisieren, um dieses Feld einzubeziehen.

So können Sie das Feld isRegistered zu allen Dokumenten in Ihrer User Sammlung hinzufügen. Etwas wie dieses:

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 
}); 
Verwandte Themen