{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スキーマタイプとは異なるため、タイプチェックを削除しました。