programing

Mongoose에서 Model.findOne()과 Model.findById()의 차이점은 무엇입니까?

powerit 2023. 5. 3. 21:59
반응형

Mongoose에서 Model.findOne()과 Model.findById()의 차이점은 무엇입니까?

_id 값을 기반으로 MongoDB에서 문서를 검색한다고 가정합니다.다음 중 효율적인 코드는 무엇입니까?

  1. ModelObj.findById(IdValue).exec(callback);

  2. ModelObj.findOne({ '_id': IdValue}).exec(callback);

ModelObj.findById()가 효율적이라고 생각합니다만, 지원하는 이유는 무엇입니까? 또는 어떻게 효율적입니까?

findById그것은 단지 편의 기능과 정확히 같은 것을 합니다.findOne당신을 쇼라고 부릅니다.

출처는 다음과 같습니다.

Model.findById = function findById (id, fields, options, callback) {
  return this.findOne({ _id: id }, fields, options, callback);
};

findById(id)와 거의 동등합니다.findOne({ _id: id }).
문서의 _id로 쿼리하려면 다음을 사용합니다.findById()대신에findOne().

두 기능 모두 트리거findOne()유일한 차이점은 그들이 어떻게 대하느냐입니다.undefined.
사용하는 경우findOne()알게 될 겁니다findOne(undefined)그리고.findOne({ _id: undefined })와 동등합니다.findOne({})임의의 문서를 반환합니다.
하지만, 몽구스는 번역을 합니다.findById(undefined)안으로findOne({ _id: null }).

https://mongoosejs.com/docs/api.html#model_Model.findById 을 참조하십시오.

출처는 다음과 같습니다.

Model.findById = function findById(id, projection, options, callback) {
  if (typeof id === 'undefined') {
    id = null;
  }

  if (callback) {
    callback = this.$wrapCallback(callback);
  }

  return this.findOne({_id: id}, projection, options, callback);
};

findById(id)는 find({_id:id}) 또는 findOne({_id:id})의 구문 설탕일 뿐입니다.

.findOne을 사용하면 데이터베이스는 각 bson 문서를 확인하여 관련 변수를 찾은 다음 값을 확인합니다. mongo가 내부 인덱스 _id 필드를 찾는 것을 알고 있다면 각 문서를 볼 필요가 없습니다.

언급URL : https://stackoverflow.com/questions/14255603/what-is-the-difference-between-model-findone-model-findbyid-in-mongoose

반응형