나는 몽고 스 발견에서 JSON 인코딩 전에 확장하고 응답으로 보내는 문서를 가지고있다. 문서에 속성을 추가하려고하면 무시됩니다. Object.getOwnPropertyNames(doc)정규 확장을 불가능하게하는 속성은 나타나지 않습니다. 이상한 점은 JSON.parse(JSON.encode(doc))작동하고 올바른 모든 속성을 가진 객체를 반환 한다는 것입니다 . 더 좋은 방법이 있습니까?
나는 몽고 스 발견에서 JSON 인코딩 전에 확장하고 응답으로 보내는 문서를 가지고있다. 문서에 속성을 추가하려고하면 무시됩니다. Object.getOwnPropertyNames(doc)정규 확장을 불가능하게하는 속성은 나타나지 않습니다. 이상한 점은 JSON.parse(JSON.encode(doc))작동하고 올바른 모든 속성을 가진 객체를 반환 한다는 것입니다 . 더 좋은 방법이 있습니까?
답변:
몽구스 는의 메소드 를 Model상속받습니다 . 나는 당신이 찾고있는 것이의 결과라고 생각합니다 .DocumenttoObject()doc.toObject()
http://mongoosejs.com/docs/api.html#document_Document-toObject
Model.find({})docs return 에서 배열을 반환하면이 작업이 수행됩니까? docs.toObject 할 수 있습니까?
var docArray = modelArray.map(function(model) { return model.toObject(); });
이를 수행하는 또 다른 방법은 Mongoose에게 필요한 모든 것을 사용하여 반환 된 문서의 일반 JavaScript 버전이라고 알려주는 것입니다. lean() 쿼리 체인에서 입니다. 그렇게하면 Mongoose는 전체 모델 인스턴스를 만드는 단계를 건너 뛰고 직접 doc수정할 수 있습니다.
MyModel.findOne().lean().exec(function(err, doc) {
doc.addedProperty = 'foobar';
res.json(doc);
});
lean는 일반적으로 전체 몽구스 문서를 처음 만드는 오버 헤드를 건너 뛰기 때문에 일반적으로 성능이 뛰어납니다.
속성이 모델에없는 경우 빠른 방법 :
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했지만 함수, 인수 및 내가 필요없는 다른 모든 것을 나에게 주었다.
_처음에 속성이나 메소드에 액세스 하는 것은 이상적인 솔루션이 아닙니다. 린을 사용하면 사건을 해결할 수 있습니다.
_doc문제에 직면하지 않고 재산을 여러 번 사용 했습니다. 그리고 lean메소드를 사용하면 몽구스 모델 작업을 수행 할 수없는 일반 객체가 제공됩니다.
객체를 문자열 화 한 다음 다시 구문 분석하여 일반 객체를 만들 수도 있습니다. 예를 들면 다음과 같습니다.
const obj = JSON.parse(JSON.stringify(mongoObj))