[node.js] 몽구스 문서를 어떻게 일반 객체로 바꾸나요?

나는 몽고 스 발견에서 JSON 인코딩 전에 확장하고 응답으로 보내는 문서를 가지고있다. 문서에 속성을 추가하려고하면 무시됩니다. Object.getOwnPropertyNames(doc)정규 확장을 불가능하게하는 속성은 나타나지 않습니다. 이상한 점은 JSON.parse(JSON.encode(doc))작동하고 올바른 모든 속성을 가진 객체를 반환 한다는 것입니다 . 더 좋은 방법이 있습니까?



답변

몽구스 는의 메소드 를 Model상속받습니다 . 나는 당신이 찾고있는 것이의 결과라고 생각합니다 .DocumenttoObject()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))


답변