복붙노트

[MONGODB] 몽구스 스키마의 배열 크기에 대한 제한을 설정하는 방법

MONGODB

몽구스 스키마의 배열 크기에 대한 제한을 설정하는 방법

몽구스 스키마를 작성하는 동안 당신이겠습니까 종류 나 배열 크기에 설정된 제한 할 수있는 방법이있다 말할 수 있습니다. 예를 들면

 var peopleSchema = new Schema({
    name: {
        type: String,
        required: true,
        default: true
    },
   /* here I want to have limit: no more than 10 friends.
    Is it possible to define in schema?*/
    friends: [{
        type: Schema.Types.ObjectId,
        ref: 'peopleModel'
    }]
})

해결법

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

    1.스키마 설정에 작은 팅겨으로 당신은 유효성 검사 옵션을 추가 할 수 있습니다 :

    스키마 설정에 작은 팅겨으로 당신은 유효성 검사 옵션을 추가 할 수 있습니다 :

    var peopleSchema = new Schema({
      name: {
        type: String,
        required: true,
        default: true
      },
      friends: {
        type: [{
          type: Schema.Types.ObjectId,
          ref: 'peopleModel'
        }],
        validate: [arrayLimit, '{PATH} exceeds the limit of 10']
      }
    });
    
    function arrayLimit(val) {
      return val.length <= 10;
    }
    
  2. ==============================

    2.만 유효가 삽입됩니다 당신이 검증 $ jsonSchema에 대해 검증됩니다 업데이트 서버 측에서 수집, 삽입 된 각 문서 / 대한 유효성 검사를 추가 할 수 있습니다 몽고 3.6에서 시작하여 유효성 검사 오류가 유효 문서가 될 것입니다

    만 유효가 삽입됩니다 당신이 검증 $ jsonSchema에 대해 검증됩니다 업데이트 서버 측에서 수집, 삽입 된 각 문서 / 대한 유효성 검사를 추가 할 수 있습니다 몽고 3.6에서 시작하여 유효성 검사 오류가 유효 문서가 될 것입니다

    db.createCollection("people", {
       validator: {
          $jsonSchema: {
             bsonType: "object",
             required: [ "name" ],
             properties: {
                name: {
                   bsonType: ["string"],
                   description: "must be a string"
                },
                friends: {
                   bsonType: ["array"],
                   items : { bsonType: ["string"] },
                   minItems: 0,
                   maxItems: 10,
                   description: "must be a array of string and max is 10"
                }
             }
          }
       }
    });
    

    수집

    > db.people.find()
    

    유효한 문서

    > db.people.insert({name: 'abc' , friends : ['1','2','3','4','5','6','7','8','9','10']})
    WriteResult({ "nInserted" : 1 })
    

    잘못된 문서

    > db.people.insert({name: 'def' , friends : ['1','2','3','4','5','6','7','8','9','10', '11']})
    WriteResult({
        "nInserted" : 0,
        "writeError" : {
            "code" : 121,
            "errmsg" : "Document failed validation"
        }
    })
    

    찾기

    > db.people.find()
    { "_id" : ObjectId("5a9779b60546616d5377ec1c"), "name" : "abc", "friends" : [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ] }
    > 
    
  3. ==============================

    3.당신은 당신의 배열에 새로운 친구 ID를 밀어시 $ 슬라이스 수정을 사용할 수 있습니다 https://docs.mongodb.com/manual/reference/operator/update/slice/#up._S_slice

    당신은 당신의 배열에 새로운 친구 ID를 밀어시 $ 슬라이스 수정을 사용할 수 있습니다 https://docs.mongodb.com/manual/reference/operator/update/slice/#up._S_slice

    $push: {
      friends: {
       $each: [id],
       $slice: -10
      }
    }
    
  4. from https://stackoverflow.com/questions/28514790/how-to-set-limit-for-array-size-in-mongoose-schema by cc-by-sa and MIT license