문제점
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증가한 새로운 값을 생성해 주는 것이었다.