sql >> データベース >  >> NoSQL >> MongoDB

MongoJsonスキーマバリデーターAnyOfが機能していません

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




    1. リアルタイムのストックアプリケーション用のRedisキーデザイン

    2. 集計_idの同じフィールドエラー

    3. マングースの親によってスコープされた埋め込みドキュメントの一意性の検証

    4. MongoDBはデータを自動的に更新しませんか?