2017-11-22 24 views
2

임베디드 문서가 존재하지 않거나 존재하는 경우 문서가 포함 된 문서의 유효성을 검사하는 Mongodb의 기본 유효성 검사 규칙을 제안하려고합니다. 하나 이상의 필드가 필수적으로 표시됩니다.임베디드 문서에 대한 Mongodb 기본 유효화

아래 예제가 있습니다. JSON 문서에는 user 문서가 삽입되어 있습니다. 이 user이 존재하지 않거나 존재하는 경우 필수 입력란 name이 있어야합니다. 내가 db.testschema.insert({})처럼 내 컬렉션 testschema에 빈 JSON 문서를 삽입 할 때

"validator" : { 
     "$or" : [ 
      { 
       "user" : { 
        "$exists" : "false", 
        "$type" : "null" 
       } 
      }, 
      { 
       "user.name" : { 
        "$type" : "string", 
        "$exists" : "true" 
       } 
      } 
      ] 
} 

는, 나는 표준 오류가있는 아래에 잘못된 및/또는 왜 무엇인지 말해주지 않습니다 얻을. 내 문서에 name 필드가 포함 된 포함 된 문서 user이 포함되어 있거나 포함 된 문서가 전혀 포함되어 있지 않아서 가능합니다.

WriteResult({ 
    "nInserted" : 0, 
    "writeError" : { 
     "code" : 121, 
     "errmsg" : "Document failed validation" 
    } 
}) 

유효성 검사기 내부에서 사용되는 연산자가 정확합니까?

답변

2

우선 null, truefalse는 문자열 만 true으로 평가되므로 false 통과, 문자열로 전달되어서는 안된다.

솔루션 "$ 유형"의 필요가 없습니다 : 널 (null) 검증, 그냥 "$가 존재하는"거짓이 경우에 충분하다이, 다음 유효성 검사가 당신

"validator" : { 
     "$or" : [ 
      { 
       "user" : { 
        "$exists" : false, 
       } 
      }, 
      { 
       "user.name" : { 
        "$type" : "string", 
        "$exists" : true 
       } 
      } 
      ] 
} 
+0

와우 위해 작동 할 그 날 너무 바보입니다! 나는 db.getCollectionInfos ({name : 'testschema'}) [0] .options.validator' 명령을 실행하여 이미 유효성 검사 규칙이 설정되어 있는지 확인하기 위해 큰 따옴표를 어떻게 사용했는지 기억합니다. Mongo 쉘은이 부울을 래핑합니다 값을 큰 따옴표로 묶어 라! 이 좋은 팁 주셔서 감사합니다! 매우 감사. – asgs

+0

도와 드리겠습니다! – daemon24