Bạn nên tạo một đối tượng mới khi khai báo CollectPoint được nhúng của bạn mặt hàng:
var data = new CollectPoint({
name: "Level 1",
collectPoints: [
new CollectPoint({
name: "Level 1.1",
collectPoints: []
})
]
});
Bằng cách này, _id và collectPoints sẽ được tạo bằng cách cài đặt CollectPoint nếu không, bạn chỉ đang tạo một JSONObject thuần túy.
Để tránh những loại vấn đề đó, hãy xây dựng trình xác thực cho mảng của bạn sẽ gây ra lỗi nếu các mục của nó có loại sai:
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'
}
}
});
Bằng cách này, điều sau sẽ gây ra lỗi:
var data = new CollectPoint({
name: "Level 1",
collectPoints: [{
name: "Level 1.1",
collectPoints: []
}]
});