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

既存のコレクションに新しいバリデーターを追加する

    私はおそらくこれにあなたの質問の1つの誤解を接頭辞として付ける必要があります。事実、MongoDBは「スキーマレス」であり、実際には「フィールドを作成」する必要がまったくないという点で、従来のRDBMSとは異なります。したがって、これは、スキーマが変更されるまで何もできない「テーブルスキーマ」とは異なります。ただし、「検証」は別のものであり、執筆時点では「まだ」比較的新しい機能です。

    「検証ルールを追加」する場合 次に、コレクションの現在の状態に依存するメソッドがあります。いずれの場合も、実際には「追加」機能はありませんが、代わりにすべてを「置換」するアクションが実行されます。 検証ルールと新しいルールを指定します。これがどのように機能するかのルールを読んでください。

    既存のドキュメント

    ドキュメントに記載されているように、コレクションに既存のドキュメントがある場合

    既存のドキュメント

    validationLevel を使用して、MongoDBが既存のドキュメントを処理する方法を制御できます。 オプション。

    デフォルトでは、 validationLevel 厳格 MongoDBは、すべての挿入と更新に検証ルールを適用します。 validationLevelの設定 中程度 検証ルールを、検証基準を満たす既存のドキュメントの挿入と更新に適用します。 中程度 レベルでは、検証基準を満たさない既存のドキュメントへの更新は、有効性についてチェックされません。

    このセクションと次の例のセクションでは、基本的に、.createCollection()のオプションに加えて ドキュメントを使用して既存のコレクションを変更することもできますが、現在のドキュメントが必要なルールを満たしていない可能性があることに「注意」する必要があります。したがって、「中程度」を使用してください 確信が持てない場合は、すべてのルールが満たされます コレクション内のドキュメント。

    適用するには、.runCommand()を使用します 現在、検証ルールを設定する「コマンド」を発行する方法。これは「validationLevel」です 上の通路から。

    既存のルールがあるので、 `.getCollectionInfos()を使用してそれらを取得し、新しいルールを追加して適用できます:

    let validatior = db.getCollectionInfos({name: "MyTestCollection"})[0].options.validator;
    
    validator.$or.push({ "LastLoginDate": { "$type": "date" } });
    
    db.runCommand({
      "collMod": "MyTestCollection",
      "validator": validator,
      "validationLevel": "moderate"
    });
    

    もちろん、前述のように、すべてのドキュメントが条件を満たしていると確信している場合は、「厳密」を適用できます。 代わりにデフォルトとして。

    空のコレクション

    その場合、コレクションが実際には「空」であり、ドキュメントがまったくない場合または 現在のデータは重要ではないため、コレクションを「削除」することができます。その後、上記を変更して、.createCollection()を使用できます。 .drop()と組み合わせて :

    let validatior = db.getCollectionInfos({name: "MyTestCollection"})[0].options.validator;
    
    validator.$or.push({ "LastLoginDate": { "$type": "date" } });
    
    db.getCollection("MyTestCollection").drop();
    
    db.createCollection( "MyTestCollection", { "validator": validator });
    


    1. 時系列をredisに保存する

    2. MongoError:タイプ:ポイントのオブジェクトからジオキーを抽出できません

    3. 複合インデックスの順序は、パフォーマンスの観点からMongoDBでどのように重要ですか?

    4. MongoDB-コレクションを作成する