Du bör bygga ett nytt objekt när du deklarerar din inbäddade CollectPoint objekt :
var data = new CollectPoint({
name: "Level 1",
collectPoints: [
new CollectPoint({
name: "Level 1.1",
collectPoints: []
})
]
});
På detta sätt _id och collectPoints kommer att skapas med hjälp av CollectPoint annars skapar du bara ett vanligt JSONObject.
För att undvika den typen av problem, bygg en validator för din array som kommer att utlösa ett fel om dess objekt har fel typ :
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'
}
}
});
På så sätt kommer följande att utlösa ett fel:
var data = new CollectPoint({
name: "Level 1",
collectPoints: [{
name: "Level 1.1",
collectPoints: []
}]
});