MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Làm cách nào để xác thực các khóa và giá trị đối tượng trong Lược đồ Mongoose?

Tùy chọn 1 (với "từ điển"): Bạn có thể sử dụng Object phương thức khởi tạo như một SchemaType để sử dụng một đối tượng thay vì một mảng đối tượng. Đây là ví dụ áp dụng cho trường hợp của bạn khi sử dụng SchemaType#validate :

offersInCategory: {
  type: Object,
  validate: object => { //our custom validator, object is the provided object
    let allowedKeys = ['Furniture', 'Household', 'Electronicts', 'Other'];
    let correctKeys = Object.keys(object).every(key => allowedKeys.includes(key)); //make sure all keys are inside `allowedKeys`

    let min = 5;
    let max = 10;
    let correctValues = Object.values(object).every(value => value > min && value < max); //make sure all values are in correct range

    return correctKeys && correctValues; //return true if keys and values pass validation
  }
}

Điều này không áp dụng kiểm tra khóa trùng lặp vì một đối tượng không thể có khóa trùng lặp , khóa sau hiện tại chỉ ghi đè khóa trước:

> let foo = { bar: 4, bar: 5}
< Object { bar: 5 }

Như bạn có thể thấy, thanh bar: 4 khóa được gán trước đó sẽ bị khóa sau ghi đè.

Tùy chọn 2 (với mảng): Bạn có thể sử dụng SchemaType#validate để triển khai xác thực tùy chỉnh của bạn trên một đường dẫn tài liệu nhất định. Đây là một ví dụ về những gì bạn muốn:

offersInCategory: [{
  validate: {
    validator: array => { //our custom validator, array is the provided array to be validated
      let filtered = array.filter((obj, index, self) => self.findIndex(el => el.category === obj.category) === index); //this removes any duplicates based on object key
      return array.length === filtered.length; //returns true if the lengths are the same; if the lengths aren't the same that means there was a duplicate key and validation fails
    },
    message: 'Detected duplicate keys in {VALUE}!'
  }
  category: {
    type: String, 
    enum: ['Furniture', 'Household', 'Electronicts', 'Other'] //category must be in this enum
  },
  val: {
    type: Number, 
    min: 0, //minimum allowed number is 0
    max: 10 //maximum allowed number is 10
  }
}]

Và nếu bạn kiểm tra điều này, nó sẽ loại bỏ các đối tượng trong mảng có khóa trùng lặp (giữ lại khóa trước đó) và kiểm tra xem liệu mảng có chỉ chứa các đối tượng có category duy nhất hay không chìa khóa.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để xuất một đối tượng chỉ khả dụng trong lệnh gọi lại không đồng bộ?

  2. Làm cách nào để thực thi một số tiêu chí động trong mongoose.find?

  3. MongoDb:$ geoIntersects cho nhiều tọa độ đầu vào

  4. Làm cách nào để thực hiện phép nối SQL tương đương trong MongoDB?

  5. pymongo không thể kết nối với cơ sở dữ liệu trên máy chủ từ xa