Node.js mongodb _id

이건선·2023년 2월 28일
0

Node.js

목록 보기
14/32

문제점
1. mongodb의 _id을 복사하는 여러 방법을 알아보던 중 적용 방법에 따라서 _id값이 다르다는 것을 알게 되었다. 아래 코드는 mongodb _id값을 반환하는 서로다른 두 코드다

testid: {
    type: mongoose.Schema.Types.ObjectId,
    default: mongoose.Types.ObjectId,
  },
});

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

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

각각의 방식으로는

testid는 mongoose.Types.ObjectId,
postId는 virtual을 사용했다.

postId는 정상적인 _id의 값을 나타냈는데 testid는 한 자리수가 더해진 값을 나타냈다.

{
  "allData": [
      {
          "_id": "63fed23f0027917ff0fe4bee",
          "testid": "63fed23f0027917ff0fe4bef",
          "postId": "63fed23f0027917ff0fe4bee",
          "id": "63fed23f0027917ff0fe4bee"
      }
  ]
}

동일한 값일까? 궁금해서 조사를 해봤다.

...

 const test = await Post.findOne();

  ...
  
  console.log("Post.postId === Post.testid", test.postId === test.testid);
  console.log("Post.postId === Post._id", test.postId === test._id);
  console.log("Post.postId === Post.id", test.postId === test.id);
  console.log("Post.testid === Post.id", test.testid === test.id);

// Post.postId === Post.testid false
// Post.postId === Post._id false
// Post.postId === Post.id true
// Post.testid === Post.id false

default: mongoose.Types.ObjectId를 사용했을 때 어플리케이션에서 자체적으로 1증가한 새로운 값을 생성해 주는 것이었다.

profile
멋지게 기록하자

0개의 댓글