Node.js mongodb

이건선·2023년 2월 27일
0

Node.js

목록 보기
13/32

문제점
mongoose에서 제공하는 Post.find()를 사용했을때 원하는 정보만 나오지 않는다. 그리고 _id이라는 이름을 내가 원하는 이름으로 변경해야 한다.

시도해본것

const posts = await Post.find(
    {},
    { _id: false, title: 1, user: 1, createdAt: 1 }
  ).sort({
    createdAt: -1,
  });

_id를 false로 주면 _id는 사라지지만 'postId'라는 이름으로 복사한 값도 사라져서 출력이 정상적으로 실행되지 않았다.

해결

...

const postsSchema = new mongoose.Schema({...})
  
...

postsSchema.virtual("postId").get(function () {
  return this._id.toHexString();
});

postsSchema.set("toJSON", {
  virtuals: true,
  transform: function (doc, ret) {
    delete ret._id;
    delete ret.id;
  },
});

...

...

const posts = await Post.find(
    {},
    { postId: 1, title: 1, user: 1, createdAt: 1 }
  ).sort({
    createdAt: -1,
  });

...

알게된것

virtual: 이 방법은 스키마에서 가상 속성을 정의하는 데 사용됩니다. 가상 속성은 데이터베이스에 지속되지 않는 속성이지만 대신 즉석에서 생성되는 계산된 속성입니다.

get: 이 메서드는 다음에 대한 getter 함수를 정의하는 데 사용됩니다. 가상 재산. getter 함수는 가상 속성에 액세스할 때마다 호출되며 스키마의 다른 속성을 기반으로 가상 속성의 값을 계산하는 데 사용할 수 있습니다.

set: 이 메서드 가상 속성에 대한 setter 함수를 정의하는 데 사용됩니다. setter 함수는 가상 속성이 설정될 때마다 호출되며 가상 속성의 값을 기반으로 스키마의 다른 속성을 업데이트하는 데 사용할 수 있습니다.

module.exports = mongoose.model("Posts", goodsSchema); 로 export했다면 Collections의 이름은 model메서드에서 정의된 "Posts"를 따르고 소문자로 변환된다.
그리고 mongoose의 메서드를 사용할 수 있다.

여기서 사용된 find의 예시를 보면

const posts = await Post.find(
    {},
    { postId: 1, title: 1, user: 1, createdAt: 1 }
  ).sort({
    createdAt: -1,
  });

1은 출력 할 값이다.

profile
멋지게 기록하자

0개의 댓글