[node.js] 몽구스 문서를 평범한 물건으로 바꾸려면 어떻게해야합니까?



1 Answers

이 작업을 수행하는 또 다른 방법은 Mongoose에게 쿼리 체인에서 lean() 을 사용하여 반환 된 문서의 일반 JavaScript 버전 만 필요한 것입니다. 그렇게하면 Mongoose는 전체 모델 인스턴스를 만드는 단계를 건너 뛸 수 있으며 직접 수정할 수있는 doc 를 얻을 수 있습니다.

MyModel.findOne().lean().exec(function(err, doc) {
    doc.addedProperty = 'foobar';
    res.json(doc);
});
Question

몽구스 문서에서 JSON 인코딩 전에 확장하고 응답으로 보내려한다는 사실을 알게되었습니다. 문서에 속성을 추가하려고하면 무시됩니다. Object.getOwnPropertyNames(doc) 에는 프로퍼티가 표시되지 않기 때문에, 통상은 확장 할 수 없습니다. 이상한 것은 JSON.parse(JSON.encode(doc)) 작동하고 모든 올바른 속성을 가진 객체를 반환한다는 것입니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?




이와 같은 문제를 해결하는 더 좋은 방법은 doc.toObject() 과 같이 사용하는 것입니다.

doc.toObject({ getters: true })

다른 옵션에는 다음이 포함됩니다.

  • getters: 모든 getter 적용 (경로 및 가상 getter)
  • virtuals: 가상 getter 적용 (getters 옵션을 대체 할 수 있음)
  • minimize: 빈 객체를 제거합니다 (기본값은 true).
  • transform: 반환하기 전에 결과 문서에 적용 할 변형 함수
  • depopulate: 채워진 경로를 원래의 ref로 바꾸고 (기본값은 false)
  • versionKey: 버전 키 포함 여부 (기본값은 true)

예를 들어

Model.findOne().exec((err, doc) => {
   if (!err) {
      doc.toObject({ getters: true })
      console.log('doc _id:', doc._id)
   }
})

이제 작동 할거야.



Related