Mongoose 문서를 일반 객체로 변환하려면 어떻게 해야 합니까?
mongoose find에서 JSON 인코딩 전에 연장하고 응답으로 발송하고 싶은 문서가 있습니다.문서에 등록 정보를 추가하려고 하면 무시됩니다.속성이 에 나타나지 않습니다.Object.getOwnPropertyNames(doc)
정상적인 연장이 불가능합니다.이상한 것은JSON.parse(JSON.encode(doc))
모든 올바른 속성을 가진 개체를 작동시키고 반환합니다.이것을 하는 더 좋은 방법이 있습니까?
몽구스Model
에서 물려받은.Document
s, 이 있는toObject()
방법.저는 당신이 찾고 있는 것이 그 결과가 되어야 한다고 믿습니다.doc.toObject()
.
http://mongoosejs.com/docs/api.html#document_Document-toObject
이렇게 하는 또 다른 방법은 Mongoose에게 쿼리 체인에서 를 사용하여 반환된 문서의 일반 자바스크립트 버전만 있으면 된다고 말하는 것입니다.그런 식으로 Mongoose는 전체 모델 인스턴스를 만드는 단계를 건너뜁니다. 그러면 당신은 직접 다음을 얻을 수 있습니다.doc
수정할 수 있습니다.
MyModel.findOne().lean().exec(function(err, doc) {
doc.addedProperty = 'foobar';
res.json(doc);
});
Johnny HK 제안:
어떤 경우에는 @Johnny.HK는 Object를 Plain Javascript로 가져올 것을 제안했습니다. 이 Mongoose Documentation에서 설명한 것처럼 데이터를 Object로 직접 쿼리할 수 있는 다른 대안이 있습니다.
const docs = await Model.find().lean();
조건부로 일반 개체 반환:
게다가, 누군가가 조건부로 사물을 보고 싶어할 수도 있다면, 그것은 또한 가능합니다.option
인수, 세 번째 매개 변수에서 find()docs를 참조하십시오.
const toObject = true;
const docs = await Model.find({},null,{lean:toObject});
다음 기능에서 사용할 수 있습니다.find()
,findOne()
,findById()
,findOneAndUpdate()
,그리고.findByIdAndUpdate()
.
참고:
또한 언급할 가치가 있습니다._id
속성이 문자열 개체가 아닙니다.JSON.parse(JSON.stringify(object))
그러나 mongoose 유형의 ObjectId를 문자열 앞에 캐스팅할 때는 다음과 같습니다.String(object._id) === otherStringId
속성이 모델에 없는 경우 빠른 방법:
document.set( key,value, { strict: false });
이와 같은 문제를 해결하는 더 나은 방법은 사용하는 것입니다.doc.toObject()
이것처럼.
doc.toObject({ getters: true })
기타 옵션은 다음과 같습니다.
getters:
모든 게터(경로 및 가상 게터) 적용virtuals:
가상 게터 적용(게터 옵션을 재정의할 수 있음)minimize:
빈 개체 제거(참으로 변환)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 을 참조하십시오.
Mongoose 문서에서 일반 객체를 가져오기 위해 사용했습니다._doc
과 같은
mongooseDoc._doc //returns plain json object
로 시도했습니다.toObject
하지만 그것은 제게 필요 없는 기능, 기능, 그리고 다른 모든 것들을 주었습니다.
린 옵션은 Mongoose에게 결과 문서의 수화를 건너뛸 것을 지시합니다.이렇게 하면 쿼리 속도가 빨라지고 메모리 집약도가 낮아지지만 결과 문서는 Mongoose 문서가 아닌 일반적인 오래된 JavaScript 개체(POJO)입니다.
const leanDoc = await MyModel.findOne().lean();
JSON.parse() 메서드를 사용할 필요가 없습니다.
개체를 문자열화한 다음 다시 구문 분석하여 일반 개체를 만들 수도 있습니다.예를 들어 다음과 같습니다.
const obj = JSON.parse(JSON.stringify(mongoObj))
나는 그것을 사용해 왔습니다.toObject
내 문서에 있는 방법이 성공하지 못했습니다.는 나는추했습다니야해가▁the를 추가해야 했습니다.flattenMap
의 true
마침내 POJO를 갖게 되었습니다.
const data = document.data.toObject({ flattenMaps: true });
언급URL : https://stackoverflow.com/questions/7503450/how-do-you-turn-a-mongoose-document-into-a-plain-object
'programing' 카테고리의 다른 글
트랜잭션 관리자가 원격/네트워크 트랜잭션에 대한 지원을 사용하지 않도록 설정했습니다. (0) | 2023.05.26 |
---|---|
동적 SQL - EXEC(@SQL) 대 EXEC SP_EXECUTSQL(@SQL) (0) | 2023.05.26 |
로컬 분기 삭제 실행 취소 (0) | 2023.05.26 |
이전에 추가한 라이브러리 제거 또는 제거: cocoapods (0) | 2023.05.26 |
SQL Server 쿼리의 최대 크기?IN절?더 나은 접근법이 있습니까? (0) | 2023.05.26 |