MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Schema auto referenziato di Mongoose che non crea ObjectId per tutti i documenti secondari

Dovresti creare un nuovo oggetto quando dichiari il tuo CollectPoint incorporato articoli :

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

In questo modo il _id e collectPoints sarà creato dall'istanza di CollectPoint in caso contrario, stai semplicemente creando un semplice JSONObject.

Per evitare questo tipo di problemi, crea un validator per il tuo array che attiverà un errore se i suoi elementi hanno un tipo errato:

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'
        }
    }
});

In questo modo si attiverà un errore:

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