[node.js] 몽구스 문서를 어떻게 일반 객체로 바꾸나요?
나는 몽고 스 발견에서 JSON 인코딩 전에 확장하고 응답으로 보내는 문서를 가지고있다. 문서에 속성을 추가하려고하면 무시됩니다. Object.getOwnPropertyNames(doc)
정규 확장을 불가능하게하는 속성은 나타나지 않습니다. 이상한 점은 JSON.parse(JSON.encode(doc))
작동하고 올바른 모든 속성을 가진 객체를 반환 한다는 것입니다 . 더 좋은 방법이 있습니까?
답변
몽구스 는의 메소드 를 Model
상속받습니다 . 나는 당신이 찾고있는 것이의 결과라고 생각합니다 .Document
toObject()
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))