나는 몽고 스 발견에서 JSON 인코딩 전에 확장하고 응답으로 보내는 문서를 가지고있다. 문서에 속성을 추가하려고하면 무시됩니다. Object.getOwnPropertyNames(doc)정규 확장을 불가능하게하는 속성은 나타나지 않습니다. 이상한 점은 JSON.parse(JSON.encode(doc))작동하고 올바른 모든 속성을 가진 객체를 반환 한다는 것입니다 . 더 좋은 방법이 있습니까?
답변
몽구스 는의 메소드 를 Model상속받습니다 . 나는 당신이 찾고있는 것이의 결과라고 생각합니다 .DocumenttoObject()doc.toObject()
http://mongoosejs.com/docs/api.html#document_Document-toObject
답변
이를 수행하는 또 다른 방법은 Mongoose에게 필요한 모든 것을 사용하여 반환 된 문서의 일반 JavaScript 버전이라고 알려주는 것입니다. lean() 쿼리 체인에서 입니다. 그렇게하면 Mongoose는 전체 모델 인스턴스를 만드는 단계를 건너 뛰고 직접 doc수정할 수 있습니다.
MyModel.findOne().lean().exec(function(err, doc) {
doc.addedProperty = 'foobar';
res.json(doc);
});
답변
속성이 모델에없는 경우 빠른 방법 :
document.set( key,value, { strict: false });
답변
이와 같은 문제를 해결하는 더 좋은 방법은 다음 doc.toObject()과 같습니다.
doc.toObject({ getters: true })
다른 옵션은 다음과 같습니다.
getters:모든 게터 적용 (경로 및 가상 게터)virtuals:가상 게터 적용 (게터 옵션 무시 가능)minimize:빈 객체 제거 (기본값은 true)transform:결과 문서에 반환하기 전에 적용 할 변환 함수depopulate:채워진 경로를 제거하여 원래 참조로 바꿉니다 (기본값은 false).versionKey:버전 키 포함 여부 (기본값은 true)
예를 들어 말할 수 있습니다
Model.findOne().exec((err, doc) => {
if (!err) {
doc.toObject({ getters: true })
console.log('doc _id:', doc._id)
}
})
이제 작동합니다.
자세한 내용은 다음을 참조하십시오 : http://mongoosejs.com/docs/api.html#document_Document-toObject
답변
몽구스 문서에서 일반 객체를 얻으려면 _doc다음과 같이 속성을 사용 했습니다.
mongooseDoc._doc //returns plain json object
나는 시도 toObject했지만 함수, 인수 및 내가 필요없는 다른 모든 것을 나에게 주었다.
답변
객체를 문자열 화 한 다음 다시 구문 분석하여 일반 객체를 만들 수도 있습니다. 예를 들면 다음과 같습니다.
const obj = JSON.parse(JSON.stringify(mongoObj))
답변
