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
'sourcetip' 카테고리의 다른 글
Enum "상속" (0) | 2023.05.28 |
---|---|
각도 - 서비스 및 구성 요소에서 파이프 사용 (0) | 2023.05.28 |
인쇄 출력을 .txt 파일로 지정 (0) | 2023.05.28 |
Xcode 경고 Apple Mach-O Linker 경고 'Pointer not aligned at address(포인터가 주소에 정렬되지 않음)를 제거하는 방법 (0) | 2023.05.28 |
선언 시 사전에 키/값 추가 (0) | 2023.05.28 |