sourcetip

Mongoose가 빈 배열을 추가하는 이유는 무엇입니까?

fileupload 2023. 5. 28. 21:00
반응형

Mongoose가 빈 배열을 추가하는 이유는 무엇입니까?

나는 내 node.js 애플리케이션으로 MongoDB의 ODM으로 Mongoose를 사용하려고 합니다.내장된 문서로 스키마를 설계할 때 값을 추가하지 않으면 Mongo에 "[]"라는 빈 배열이 저장됩니다.왜 이러한가?기록 변경 내용을 레코드에 저장하려고 하는데 빈 배열은 변경 내용이 값을 삭제했음을 의미합니다.여기 스키마의 샘플이 있습니다.

schema.Client = new mongoose.Schema({
    name:{type:String, required:true},
    products:[{
        name:{type:String, index:true},
        startDate:Date,
        endDate:Date
    }],
    subdomain:{type:String, index:{unique:true}},
})

이름과 하위 도메인만 사용하여 문서를 저장할 때의 결과 문서입니다.

{
    "name": "Smith Company",
    "products": [],
    "subdomain": "smith"
}

기본적으로 빈 배열의 제품을 추가한 이유와 중지 방법은 무엇입니까?

아래와 같이 스키마를 정의하여 해결할 수 있습니다.

products: {
  type: [{
    name:String,
    startDate:Date,
    endDate:Date
  }],
  default: undefined
}

배열을 사용하면 모델에서 요소를 쉽게 추가하거나 제거할 수 있습니다.

$push $addToSet $pull업데이트하면 어레이 요소를 관리하는 데 도움이 됩니다.

빈 배열이 없으면 요소를 다음으로 푸시할 수 없습니다.null

그러나 그것은 빈 배열로 가능합니다.

기본적으로 배열은 다음과 같습니다.[]값을 덮어쓸 수 있습니다.

var UserSchema = new Schema({
  followers : {
    type: [String],
    default: undefined
  }
})

이것은 의도적인 것처럼 보이지만 '사전' 처리기를 사용하여 기본 빈 배열을 제거하는 해결 방법이 있습니다. https://github.com/LearnBoost/mongoose/issues/1335

필드를 다음으로 설정할 때만 작동했습니다.null,그래도.로 설정하면undefined샘플 코드에서처럼 빈 배열이 다시 돌아오는 것 같습니다.

스키마에서 제품을 객체 배열로 정의하고 있기 때문입니다.다음과 같은 방법을 사용해야 합니다.

products: {
        name:{type:String, index:true},
        startDate:Date,
        endDate:Date
    },

이렇게 하면 배열 대신 빈 개체가 저장됩니다.

이것은 나에게 효과가 있었습니다. 당신이 보내지 않으면 객체는 전혀 저장되지 않습니다. 이것은 나의 문제였습니다. 빈 하위 배열이 있는 빈 객체였기 때문에 나의 코드는 각에 대해 그것을 인식하고 있었습니다.

이것은 다른 스키마를 하위 스키마로 참조하는 것입니다.

runtimeParams:{type:[param], required:false, default:()=> defined }, 이것은 일반 문자열 배열입니다.

stages:{
    type:[String],
    required:false,
    default:()=> undefined
},

언급URL : https://stackoverflow.com/questions/12658152/why-does-mongoose-add-blank-arrays

반응형