복붙노트

[MONGODB] 몽구스 '정적'방법 대 '예'방법

MONGODB

몽구스 '정적'방법 대 '예'방법

이 질문은 이것과 유사하지만 용어가 다른 생각합니다. 몽구스 4 문서에서 :

// define a schema
var animalSchema = new Schema({ name: String, type: String });

// assign a function to the "methods" object of our animalSchema
animalSchema.methods.findSimilarTypes = function (cb) {
  return this.model('Animal').find({ type: this.type }, cb);
}

그리고:

// assign a function to the "statics" object of our animalSchema
animalSchema.statics.findByName = function (name, cb) {
  return this.find({ name: new RegExp(name, 'i') }, cb);
}

var Animal = mongoose.model('Animal', animalSchema);
Animal.findByName('fido', function (err, animals) {
  console.log(animals);
});

뿐만 아니라 그것을 사용할 수있는 경우 FindByName 방법을 것이다 정적 메서드 동물 인스턴스의 각으로 보인다. 스키마의 정적 및 방법 객체는 무엇입니까? 무슨 차이가 나는 하나가 다른 것에 대해 이유를 사용해야합니까?

해결법

  1. ==============================

    1.정적은 모델에 정의 된 방법입니다. 방법은 문서 (예)에 정의된다.

    정적은 모델에 정의 된 방법입니다. 방법은 문서 (예)에 정의된다.

    당신은 Animal.findByName 같은 정적 인 방법을 사용할 수 있습니다 :

    const fido = await Animal.findByName('fido');
    // fido => { name: 'fido', type: 'dog' }
    

    그리고 당신은 fido.findSimilarTypes 같은 인스턴스 메서드를 사용할 수 있습니다 :

    const dogs = await fido.findSimilarTypes();
    // dogs => [ {name:'fido',type:'dog} , {name:'sheeba',type:'dog'} ]
    

    하지만 당신은 동물 모델이기 때문에, 그것은 더 "유형을"없음) (Animals.findSimilarTypes을 할 것입니다. 모델에 정의 된 findSimilarTypes 동물 모델에 존재하지 것 this.type을 필요로 만 문서 인스턴스는 해당 속성을 포함 할 것이다.

    경우 FindByName 모든 문서를 통해 검색해야하고 스누피 그냥 문서이기 때문에 마찬가지로 당신은 fido.findByName을 wouldn't¹.

    ¹Well는, 기술적으로는 인스턴스가 컬렉션에 대한 액세스 (this.constructor 또는 this.model ( '동물')를) 가지고 있지만 때문 (적어도이 경우) 이해하지 않을 수 인스턴스 메서드 그 아무튼 '를 가지고 t 인스턴스에서 모든 속성을 사용합니다. (이 아웃 지적에 대한 @AaronDufour 덕분에)

  2. ==============================

    2.데이터베이스 논리 데이터 모델 내에 캡슐화되어야한다. 몽구스, 방법 및 정적이 일의 2 가지 방법을 제공합니다. 정역학가 itself.The 정적 키워드를 정의하는 모델 정적 "클래스"방법 모델에 대한 정적 방법을 추가하는 반면 방법이 문서에 대한 인스턴스 메서드를 추가합니다. 정적 방법은 모델의 인스턴스에서 호출되지 않습니다. 대신,이 모델 자체에서 호출하고 있습니다. 이들은 종종 만들 수있는 기능 또는 복제의 객체 등의 유틸리티 기능입니다. 아래의 예와 같이 :

    데이터베이스 논리 데이터 모델 내에 캡슐화되어야한다. 몽구스, 방법 및 정적이 일의 2 가지 방법을 제공합니다. 정역학가 itself.The 정적 키워드를 정의하는 모델 정적 "클래스"방법 모델에 대한 정적 방법을 추가하는 반면 방법이 문서에 대한 인스턴스 메서드를 추가합니다. 정적 방법은 모델의 인스턴스에서 호출되지 않습니다. 대신,이 모델 자체에서 호출하고 있습니다. 이들은 종종 만들 수있는 기능 또는 복제의 객체 등의 유틸리티 기능입니다. 아래의 예와 같이 :

    const bookSchema = mongoose.Schema({
      title: {
        type : String,
        required : [true, 'Book name required']
      },
      publisher : {
        type : String,
        required : [true, 'Publisher name required']
      },
      thumbnail : {
        type : String
      }
      type : {
        type : String
      },
      hasAward : {
        type : Boolean
      }
    });
    
    //method
    bookSchema.methods.findByType = function (callback) {
      return this.model('Book').find({ type: this.type }, callback);
    };
    
    // statics
    bookSchema.statics.findBooksWithAward = function (callback) {
      Book.find({ hasAward: true }, callback);
    };
    
    const Book = mongoose.model('Book', bookSchema);
    export default Book;
    

    추가 정보를 원하시면 : https://osmangoni.info/posts/separating-methods-schema-statics-mongoose/

  3. ==============================

    3.Pls는 또한 모델 대 문서에 대해 mongoosejs에서이 문서를 확인

    Pls는 또한 모델 대 문서에 대해 mongoosejs에서이 문서를 확인

    [https://mongoosejs.com/docs/documents.html][1]

    그것은 '정적'방법 대 '예'방법을 더 잘 이해하도록 도와주었습니다

  4. from https://stackoverflow.com/questions/29664499/mongoose-static-methods-vs-instance-methods by cc-by-sa and MIT license