MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

मोंगोस स्कीमा में ऑब्जेक्ट कुंजियों और मानों को कैसे सत्यापित करें?

विकल्प 1 ("शब्दकोश" के साथ): आप Object का उपयोग कर सकते हैं ऑब्जेक्ट की एक सरणी के बजाय किसी ऑब्जेक्ट का उपयोग करने के लिए एक स्कीमा टाइप के रूप में कंस्ट्रक्टर। यहां एक उदाहरण दिया गया है जो 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
  }
}

यह डुप्लिकेट कुंजी जांच लागू नहीं करता है क्योंकि किसी ऑब्जेक्ट में डुप्लिकेट कुंजियां नहीं हो सकती हैं , बाद में मौजूद कुंजी पिछली कुंजी को ओवरराइड कर देती है:

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

जैसा कि आप देख सकते हैं, bar: 4 पहले असाइन की गई कुंजी को बाद की कुंजी द्वारा ओवरराइड किया जाता है।

विकल्प 2 (सरणी के साथ): आप SchemaType#validate का उपयोग कर सकते हैं एक निश्चित दस्तावेज़ पथ पर अपने कस्टम सत्यापन को लागू करने के लिए। आप जो चाहते हैं उसका एक उदाहरण यहां दिया गया है:

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

और यदि आप इसका परीक्षण करते हैं, तो यह डुप्लिकेट कुंजियों के साथ सरणी में वस्तुओं से छुटकारा दिलाएगा (पहले वाले को रखते हुए) और यह देखने के लिए जांच करता है कि क्या सरणी केवल अद्वितीय category के साथ ऑब्जेक्ट रखती है कुंजियाँ।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MEAN स्टैक:किसी फ़ंक्शन के परिणाम को डेटाबेस में कैसे अपडेट करें?

  2. मोंगोडब 16 एमबी दस्तावेज़ उदाहरण, कितना वास्तविक डेटा?

  3. मोंगोडब और नोडज का उपयोग करके एक वादे को हल करना

  4. नेवले का उपयोग करके कच्चे mongoDB कमांड कैसे चलाएं?

  5. MongoDB कम्पास फ़िल्टर एक्सप्रेशन टू गो bson.M एक्सप्रेशन