2014-07-24 14 views
18

Tôi có một schema dùng với mongoose trong nodejs như thế nàyMongoose schema lĩnh vực bắt buộc

userschema = mongoose.Schema({ 
    org: String, 
    username: String, 
    fullname: String, 
    password: String, 
    email: String 
}); 

Trừ đôi khi tôi cần thêm một số lĩnh vực hơn.

Câu hỏi chính là: Tôi có thể có các trường tùy chọn trong lược đồ đơn không?

Trả lời

31

Tất cả các trường trong giản đồ mongoose là tùy chọn theo mặc định (bên cạnh _id, tất nhiên).

Trường chỉ được yêu cầu nếu bạn thêm required: true vào định nghĩa của trường.

Vì vậy, hãy xác định giản đồ của bạn làm siêu lớn của tất cả các trường có thể, thêm required: true vào các trường được yêu cầu.

+2

Có thể thiết lập 'yêu cầu: true' trên một vài lĩnh vực nếu và chỉ nếu một lĩnh vực thứ ba đã' yêu cầu: true'? Trường hợp sử dụng cho điều này khá phổ biến ... ví dụ: 'hourlyRate' và' endDate' chỉ được yêu cầu nếu 'isContractor' là trường bắt buộc. –

19

Ngoài tùy chọn (mặc định) và cần, một lĩnh vực cũng có thể là điều kiện cần thiết , dựa trên một hoặc nhiều lĩnh vực khác.

Ví dụ, yêu cầu mật khẩu chỉ khi email tồn tại:

var userschema = mongoose.Schema({ 
    org: String, 
    username: String, 
    fullname: String, 
    password: { 
     type: String, 
     required: function(){ 
      return this.email? true : false 
     } 
    }, 
    email: String 
}); 
Các vấn đề liên quan