2016-09-23 33 views
0

Ich habe ein Schema, in dem die Balance Feld wie unten dargestellt deklariert wirdMin Validierung nicht in Mongoose Arbeits

balance: { 
    type: Number, 
    min: 0, 
    default: 30 
} 

I 0 als Minimalwert eingestellt haben, so dass der Rest kein negativer Wert sein würde. Wenn ich jedoch den Saldowert über die Aktualisierungsabfrage dekrementiere, stellt sich der Saldo als negativer Wert heraus.

Meine Update-Abfrage:

User.update({ 
    _id: mongoose.Types.ObjectId(id) 
}, { 
    $inc: { 
     balance: -10 
    } 
}, function(error, result) { 
    // code 
}); 

Habe ich einen Fehler mit dem Code?

Antwort

2

Mongoose Validierung ist eine interne Middleware, die nicht auf Update genannt wird; Wenn Sie Validierungen für das Update erzwingen möchten, sollten Sie das Dokument finden, die Attribute aktualisieren und es speichern.

Zum Beispiel:

User.findById(id, function(err, result) { 
    if (err) return handleError(err); 
    user.balance = -10; 
    user.save(function(err) { 
    if (err) return handleError(err); 
    ... 
    }); 
}); 
4

Standardmäßig validiert Mungo bei einem Update-Aufruf nicht, es gibt jedoch eine Option dafür. Schauen Sie sich die Mungo-Dokumentation: http://mongoosejs.com/docs/validation.html (Update Validatoren)

var opts = { runValidators: true }; 
Toy.update({}, { color: 'bacon' }, opts, function (err) { 
    assert.equal(err.errors.color.message, 
    'Invalid color'); 
}); 
0

auf Update Aktivieren der Validierung (standardmäßig deaktiviert) findByIdAndUpdate verwenden würde wie folgt aussehen:

User.findByIdAndUpdate(id, { 
    $set: attributes, 
}, { 
    new: true, 
    runValidators: true, 
}) 
.then((user) => { 
    if (!user) { 
    // user not found 
    } 

    console.log(user); 
}) 
.catch(e => console.log(e)); 
Verwandte Themen