programing

Mongoose 문서를 일반 객체로 변환하려면 어떻게 해야 합니까?

magicmemo 2023. 5. 26. 20:51
반응형

Mongoose 문서를 일반 객체로 변환하려면 어떻게 해야 합니까?

mongoose find에서 JSON 인코딩 전에 연장하고 응답으로 발송하고 싶은 문서가 있습니다.문서에 등록 정보를 추가하려고 하면 무시됩니다.속성이 에 나타나지 않습니다.Object.getOwnPropertyNames(doc)정상적인 연장이 불가능합니다.이상한 것은JSON.parse(JSON.encode(doc))모든 올바른 속성을 가진 개체를 작동시키고 반환합니다.이것을 하는 더 좋은 방법이 있습니까?

몽구스Model에서 물려받은.Documents, 이 있는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를 추가해야 했습니다.flattenMaptrue마침내 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

반응형