Ich habe dies versucht, die null
, undefined
ermöglicht und vollständiger Wegfall des Schlüssels gespeichert werden:In mongoose wie benötige ich ein String-Feld, um nicht null oder undefiniert (erlaubt 0-Länge Zeichenfolge)?
{
myField: {
type: String,
validate: value => typeof value === 'string',
},
}
und das, was nicht ''
(die leere Zeichenkette) gespeichert werden erlaubt:
{
myField: {
type: String,
required: true,
},
}
Wie erzwingen ich, dass ein Feld ein String
und Gegenwart und weder null
noch undefined
in Mongoose, ohne die leere Zeichenkette zu Verbieten?
new User({})
und
new User({myField: null})
const mongoose = require('mongoose');
var userSchema = new mongoose.Schema({
myField: {
type: String,
required: isMyFieldRequired,
}
});
function isMyFieldRequired() {
return typeof this.myField === 'string'? false : true
}
var User = mongoose.model('user', userSchema);
wird:
Wie funktioniert das mit Filialdokumenten, bei denen ich nicht weiß, wo mein Schema bereitgestellt wird? Bei "erforderlichen" Callbacks ist "dies" immer das übergeordnete Element und ich kann nicht herausfinden, wie ich das Filialdokument innerhalb des Callbacks finden kann, ohne es an der falschen Stelle fest zu codieren. – binki
Definieren Sie Filialdokumente nicht im Schema? Es sollte auch für ein verschachteltes Feld ähnlich funktionieren. Z.B. 'return typeof this.anotherField.nestedField === 'string'? false: true' –
Wenn ich es generisch schreibe, wo ich ein Schema wie folgt definiere: 'const SubDocSchema = new mongoose.Schema ({a: {type: String, erforderlich: function() {return typeof this.a == = 'string'}}}) ', dann, wenn ich es als Filialdokument setze, wie' const SuperDocSchema = new mongoose.Schema ({subDoc: {type: SubDocSchema, default: SubDocSchema}}) ', dann wenn ich es versuche validiere eine Instanz eines Modells, das aus dem 'SuperDocSchema' erstellt wurde, überprüft es das Superdokument anstelle des Unterdokuments für die Eigenschaft' a', die nicht existiert, was mongoose sagt, dass die 'a'-Eigenschaft des Unterdokuments erforderlich ist. – binki