MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Selbstreferenziertes Mongoose-Schema, das keine ObjectId für alle Unterdokumente erstellt

Sie sollten ein neues Objekt erstellen, wenn Sie Ihren eingebetteten CollectPoint deklarieren Artikel :

var data = new CollectPoint({
    name: "Level 1",
    collectPoints: [
        new CollectPoint({
            name: "Level 1.1",
            collectPoints: []
        })
    ]
});

Auf diese Weise die _id und collectPoints wird durch die Instanziierung von CollectPoint erstellt Andernfalls erstellen Sie nur ein einfaches JSONObject.

Um solche Probleme zu vermeiden, erstellen Sie einen Validator für Ihr Array, das einen Fehler auslöst, wenn seine Elemente den falschen Typ haben:

var CollectPointSchema = new mongoose.Schema({
    name: { type: String },
    collectPoints: {
        type: [this],
        validate: {
            validator: function(v) {
                if (!Array.isArray(v)) return false
                for (var i = 0; i < v.length; i++) {
                    if (!(v[i] instanceof CollectPoint)) {
                        return false;
                    }
                }
                return true;
            },
            message: 'bad collect point format'
        }
    }
});

Auf diese Weise wird Folgendes einen Fehler auslösen:

var data = new CollectPoint({
    name: "Level 1",
    collectPoints: [{
        name: "Level 1.1",
        collectPoints: []
    }]
});