2014-12-03 16 views
9

Tôi có schema nàyschema Mongoose yêu cầu mảng thể để trống

var StuffSchema = new mongoose.Schema({ 
    _id: { type: String, required: true, unique: true }, 
    name: { type: String, required: true } 
}); 

mongoose.model('Stuff', StuffSchema); 

trình tốt.

Bây giờ tôi cần phải thêm schema khác "Cargo" chứa này

mystuff: { type:[String], ref: 'Stuff', required:true}, 

có nghĩa là, tôi muốn MyStuff để chứa mảng các id của Stuff, nhưng điều này không thành công với xác nhận lỗi khi chạy mã này

mongoose.model('Cargo').create(some data...) 

nếu tôi sử dụng một mảng trống cho trường bí ẩn. Có vẻ như để làm việc nếu tôi thay đổi schema Cargo

mystuff: { type:[String], ref: 'Stuff'}, 

nhưng tôi muốn các lĩnh vực MyStuff được yêu cầu và cho phép mảng trống

tôi có thể làm gì để thực hiện điều này?

Trả lời

11

Mảng trống được tạo theo mặc định (xem thêm this). Thuộc tính required: true yêu cầu mảng phải có ít nhất một phần tử trong đó (source code). Bạn có thể loại bỏ thuộc tính đó để có được hành vi mong muốn của bạn.

(Bên cạnh, cầy mangut gán một lĩnh vực mặc định _id với kiểu ObjectId cho tất cả schemas Tuyên bố nó là không cần thiết, và sử dụng một chuỗi không phải là điển hình, mặc dù chắc chắn cho phép..)

Sửa tháng 11 năm 2017: Đây là một thay đổi ứng cử viên ở Mongoose 5. Xem https://github.com/Automattic/mongoose/issues/5139.

+0

Tôi không nghĩ rằng loại lược đồ * có * là ObjectId, nó cần phải là bất kỳ loại thuộc tính nhận dạng nào của lược đồ được tham chiếu. Xem ví dụ trong tài liệu http://mongoosejs.com/docs/populate.html – dafyddPrys

+0

@dafyddPrys đúng - đã làm rõ ghi chú, cảm ơn. – ZachB

Các vấn đề liên quan