{test:"123"}
anyOf
のどのスキーマにも準拠していないため、検証に失敗します 、test1
が必要です またはtest2
唯一の鍵として。
anyOf
各サブスキーマをインスタンスに適用し、少なくとも1つのサブスキーマが検証に合格した場合に有効であると主張します。
{test1: "123" }
ルートスキーマがadditionalProperties: false
であるため、失敗します 同じスキーマオブジェクトproperties
で定義されていないオブジェクト内のキーを防止します またはpatternProperties
。
解決策は、いくつかの重複を持たせることです。
In THIS
例(リンクはブラウザテスト用ですが、draft-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
}
]
}
挿入するものの1つにtest1
があることを確認することが目的の場合 またはtest2
、それなら私はJSONスキーマがあなたを助けることができないのではないかと思います。 MongoのコンテキストでのJSONスキーマは、各アイテムを個別にチェックすることしかできず、挿入される可能性のあるレコードのコレクションを検証する機能はありません。
上記のスキーマ例では、この質問とは関係がなく、bsonTypeはJSONスキーマタイプとは異なるため、タイプチェックを削除しました。