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