내가 MongoDB를/노드를 배우려고 노력하고있어 나는 스키마에 나는 종종 이런 걸 볼 것으로 나타났습니다 :몽구스 toObject : {virtuals에 : TRUE}
toObject: { virtuals: true }
toJSON: { virtuals: true }
이 두 선은 무엇을 의미합니까를?
내가 MongoDB를/노드를 배우려고 노력하고있어 나는 스키마에 나는 종종 이런 걸 볼 것으로 나타났습니다 :몽구스 toObject : {virtuals에 : TRUE}
toObject: { virtuals: true }
toJSON: { virtuals: true }
이 두 선은 무엇을 의미합니까를?
"MongoDB"가 아니라 몽구스 ODM에만 해당됩니다.
몽구스에는 스키마 정의에 "virtual" 필드의 개념이 있습니다. 이것은 본질적으로이 (문서에서 노골적인 이삭) 수 :
var personSchema = new Schema({
name: {
first: String,
last: String
}
});
var Person = mongoose.model("Person", personSchema);
을하지만 당신은 단지에 "저장"이러한 속성을 원하지만 다음 "전체 이름"이라는 코드에 액세스 할 수있는 뭔가가 있다고 가정합니다.
personSchema.virtual("name.full").get(function() {
return this.name.first + ' ' + this.name.last;
});
이제 우리는 같은 것을 수행 할 수 있습니다 : "virtuals에"이 들어올 곳입니다
var bad = new Person({
name: { "first": "Walter", "last": "White" }
});
console.log("%s is insane", bad.name.full); // Walter White is insane
는 그래서 name.full
실제로 데이터가 존재하지 않습니다, 그것은 코드의 단지 스키마 표현입니다. 물론 메서드의 코드 당 두 필드를 결합하는 값을 반환하는 메서드를 만들기 위해 개체에있는 실제 데이터를 사용하는 함수에 "묶여"있습니다.
이것은 기본적으로 "가상"필드에 관한 것입니다. 사실 "데이터베이스"에 저장되거나 지속되지 않는 값을 제시하는 "객체"문서에 정의 된 "메소드"입니다. 일반적으로 데이터 저장소의 실제 지속 값을 기반으로합니다.
하지만 직접적인 질문을 정리하십시오. Mongoose는 기본적으로 "저장된"필드를 기반으로 내부 객체 구조의 내용 만 '직렬화'합니다. 그래서 그 두 줄은 "정말"평균 무엇 :
toObject() : 이것은 다른 모든 "몽구스 마법"부분없이 오브젝트 데이터의 "일반"또는 "원시"표현을 생산 확장 된 개체. 그러나 "가상"의 목적은 반환 된 객체의 일부로 해당 메소드를 만드는 것입니다. 기본적으로 그냥 일반 객체는 전화로 :
var model = Model.new({ "name": { "first": "Walter", "last": "White" });
console.log(model.toObject());
toJSON() : 위의 그림과 같이 명시 적으로 그냥이 메소드를 호출 할 수 있지만, 가장 일반적인 사용 같은이 곳 아래에 JSON 파서에서입니다입니다 암시 적으로 호출됩니다. 위와 같은 원칙이 적용됩니다. 따라서 후자의 경우 객체에 .toJSON()
방법의 "암시"통화가
var model = Model.new({ "name": { "first": "Walter", "last": "White" });
JSON.stringify(model, undefined, 2);
다음 "virtuals에"는 같은 직렬 출력 이러한 방법의 결과를 포함한다. 구성에서 수행하는 작업은 해당 메서드가 객체에있는 데이터 또는 "필드"뿐만 아니라 정의 된 "가상"메서드 및 해당 출력도 포함되도록하는 것입니다. .toObject()
과 동일합니다.
여기서 일반적인 관행은 도움이되는 답변을 "수락하는"것입니다. 그것은 대답 등급 번호 옆에 큰 "진드기"입니다. 당신이 묻는 모든 질문에 대한 단 하나의 대답을 받아들이지 않았기 때문에 이것을 말하십시오. 그들은 모두 잘못 될 수는 없으므로 받아 들여야합니다. –
이 옵션에 대한 [documentation] (http://mongoosejs.com/docs/guide.html#toJSON)을 읽으셨습니까? – JohnnyHK