Vous devez créer un nouvel objet lors de la déclaration de votre CollectPoint intégré articles :
var data = new CollectPoint({
name: "Level 1",
collectPoints: [
new CollectPoint({
name: "Level 1.1",
collectPoints: []
})
]
});
De cette façon, le _id et collectPoints sera créé par l'instanciation de CollectPoint sinon, vous créez simplement un JSONObject.
Pour éviter ce genre de problèmes, créez un validateur pour votre tableau qui déclenchera une erreur si ses éléments ont un mauvais type :
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'
}
}
});
Ainsi, ce qui suit déclenchera une erreur :
var data = new CollectPoint({
name: "Level 1",
collectPoints: [{
name: "Level 1.1",
collectPoints: []
}]
});