{test:"123"} सत्यापन विफल हो जाता है क्योंकि यह anyOf . में किसी भी स्कीमा के अनुरूप नहीं है , जिसे test1 . की आवश्यकता है या test2 एकमात्र कुंजी के रूप में।
anyOf प्रत्येक उपस्कीमा को आपके उदाहरण पर लागू करता है, और यदि कम से कम एक उपयोजना सत्यापन पास कर लेती है, तो यह मान्य है।
{test1: "123" } विफल रहता है क्योंकि रूट स्कीमा additionalProperties: false आपके ऑब्जेक्ट में किसी भी कुंजी को समान स्कीमा ऑब्जेक्ट properties . में परिभाषित नहीं होने से रोकता है या patternProperties ।
समाधान कुछ दोहराव है।
In THIS
उदाहरण (लिंक ब्राउज़र परीक्षण के लिए है लेकिन केवल ड्राफ्ट -7 के लिए है), मैंने मूल गुण जोड़े हैं test1 और test2 . यह डेटा को अनुमति देगा जहां आपके पास test1 . की कुंजी है या test2 पास करने के लिए, लेकिन मुझे आपकी आवश्यकताओं के बारे में पता नहीं है, मैं आपको यह नहीं बता सकता कि किसी ऑब्जेक्ट को test की कुंजी के साथ अनुमति देने के लिए स्कीमा को कैसे संशोधित किया जाए पास करने के लिए (प्रत्येक anyOf . के रूप में) उपस्कीमा इसे रोकते हैं)।
{
"type": "object",
"additionalProperties": false,
"properties": {
"_id": {},
"test": {},
"test1": {},
"test2": {}
},
"anyOf": [
{
"type": "object",
"properties": {
"test1": {}
},
"additionalProperties": false
},
{
"type": "object",
"properties": {
"test2": {}
},
"additionalProperties": false
}
]
}
अगर आपका इरादा यह जांचना है कि आपके द्वारा डाली जा रही चीजों में से एक में test1 है या test2 , तो मुझे डर है कि JSON स्कीमा आपकी मदद नहीं कर सकती है। Mongo के संदर्भ में JSON स्कीमा केवल प्रत्येक आइटम को अलग-अलग जांच सकता है, और संभावित रूप से सम्मिलित रिकॉर्ड के संग्रह को सत्यापित करने की क्षमता नहीं रखता है।
उपरोक्त उदाहरण स्कीमा में, मैंने टाइप चेकिंग को हटा दिया है क्योंकि यह इस प्रश्न के लिए प्रासंगिक नहीं है, और bsonType वैसे भी JSON स्कीमा प्रकार से भिन्न है।