복붙노트

[MONGODB] 기존 컬렉션에 새 검사기를 추가

MONGODB

기존 컬렉션에 새 검사기를 추가

나는 기존 컬렉션에 (LastLoginDate Date 형의) 새로운 필드를 추가하기 위해 노력하고있어. 여기 내 샘플 스크립트입니다 :

db.createCollection( "MyTestCollection",
   { "validator": { "$or":
       [
          { "username": { "$type": "string" } },
          { "notes": { "$type": "string" } }
       ]
    }
   }
)

db.getCollectionInfos({name: "MyTestCollection"});
  [
     {
        "name" : "MyTestCollection",
        "options" : {
           "validator" : {
              "$or" : [
                 {
                    "username" : {
                       "$type" : "string"
                    }
                 },
                 {
                    "notes" : {
                       "$type" : "string"
                    }
                 }
              ]
           }
        }
     }
  ]

이 기존의 모음 "최신 컬렉션"에, { "날짜"$ 유형 :} 어떤 것은 새로운 분야 마지막 로그인 날짜를 추가 할 수있는 가장 좋은 방법입니다.

새로운 분야에 기존 모음을 새 문서를 추가 또는 업데이트하면이 필드를 만들 수 있습니다. 하지만 난 새 필드의 날짜 형식을 적용하는 방법을 모르겠어요. 새로운 제출 한 추가 한 후 내가 다시 다음 명령을 실행하면, 그것은 새로 추가 된 필드에 대한 입력 유효성 검사기를 표시하지 않습니다.

해결법

  1. ==============================

    1.아마 당신의 질문에 하나의 오해와이 접두사 "해야한다". 사실은 "스키마"이라고 전통적인 RDBMS에서 MongoDB를의 다릅니다 그리고 당신은 전혀 "필드를 만듭니다"를 사실 필요하지 않습니다. 스키마 변경 될 때까지 아무것도 할 수없는 "테이블 스키마"에서이 다릅니다 그래서. "검증"그러나 다른 것뿐만 아니라 글을 쓰는 등 "여전히"상대적으로 새로운 기능입니다.

    아마 당신의 질문에 하나의 오해와이 접두사 "해야한다". 사실은 "스키마"이라고 전통적인 RDBMS에서 MongoDB를의 다릅니다 그리고 당신은 전혀 "필드를 만듭니다"를 사실 필요하지 않습니다. 스키마 변경 될 때까지 아무것도 할 수없는 "테이블 스키마"에서이 다릅니다 그래서. "검증"그러나 다른 것뿐만 아니라 글을 쓰는 등 "여전히"상대적으로 새로운 기능입니다.

    당신은 "유효성 검사 규칙을 추가"하려면 다음 컬렉션의 현재 상태에 따라 방법이있다. 각각의 경우에, 실제로 기능 없음 "에 추가"는 없지만, 액션 대신 지정하는 새 것으로 "교체"모든 유효성 검사 규칙이다. 어떻게이 작품의 규칙에 대해 읽어보십시오.

    컬렉션은 기존의 문서로이 문서에서 언급 한 경우

    이는 다음과 같은 예 섹션은 기본적으로 .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 });
    
  2. from https://stackoverflow.com/questions/44318188/add-new-validator-to-existing-collection by cc-by-sa and MIT license