MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana cara memvalidasi kunci dan nilai objek dalam Skema Mongoose?

Opsi 1 (dengan "kamus"): Anda dapat menggunakan Object konstruktor sebagai SchemaType untuk menggunakan objek alih-alih array objek. Berikut adalah contoh yang berlaku untuk situasi Anda menggunakan 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
  }
}

Ini tidak berlaku untuk pemeriksaan kunci duplikat karena suatu objek tidak dapat memiliki kunci duplikat , kunci terakhir yang ada hanya menggantikan kunci sebelumnya:

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

Seperti yang Anda lihat, bar: 4 kunci yang ditetapkan sebelumnya ditimpa oleh kunci berikutnya.

Opsi 2 (dengan larik): Anda dapat menggunakan SchemaType#validate untuk menerapkan validasi khusus Anda pada jalur dokumen tertentu. Berikut ini contoh yang Anda inginkan:

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
  }
}]

Dan jika Anda menguji ini, itu akan menyingkirkan objek dalam array dengan kunci duplikat (menjaga yang sebelumnya) dan memeriksa untuk melihat apakah array hanya menampung objek dengan category unik kunci.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB mendapatkan executionStats untuk kueri agregat

  2. Driver Mongodb C# - tidak dapat menggunakan otentikasi admin untuk mengakses database lain

  3. Dorong objek ke dalam array jika array ada jika tidak, buat array dengan objek di MongoDB

  4. Bidang agregat MongoDB dalam array objek

  5. Apakah saya perlu membersihkan input pengguna sebelum memasukkan MongoDB (kombo MongoDB + Node js)