ORMクラスのMongooseを使ってNodeJsデータをアップグレードします.

4565 ワード

半分の湖を飲んで、川の味を知るべきです.落ち葉を拾い,世の中の秋涼を満喫する.
MongooseはNodeとMongoDBに基づく高級ORMクラスで、典型的なORMは現代ソフトウェアプロジェクトの重要な一部である.Mongooseはデータベースから任意の情報を抽出できます.アプリケーションコードはオブジェクトとその方法だけでインタラクションされます.ORMは、異なるタイプのオブジェクト間の関係を指定することができます.業務ロジックをレッドクラスに入れることもできます.
Mongooseは内蔵検証とタイプ転換の機能を持ち、需要に応じて拡張とカスタマイズが可能です.MongooseがExpressと出会い、Mongooseは本当にMVCの概念にスタックを付ける.
私たちはmongoogleを独立したモングDBライブラリとして使ってもいいです.
var mongoose = require('mongoose')
monogoogleの要求は非同期です.データベースサーバに接続する時は接続の完了を待つ必要はなく、元のドライバは折り返しで実現します.
mongoose.connect(uri[s], [options], [callback])
接続URLは標準フォーマットに従う.
mognodb://username:password@host:port/database
Mongoskinや他のライト級のMongoDBクラスに比べて、Mongooseには明らかな違いがあります.model()を使って、頭文字の大文字のモデル変数名と一つの原型に入ってモデルを作ります.
var User = mongoose.model('User', {name:String});
設定が完了したらドキュメントオブジェクトを具体化できます.
var user = new User({name:'junchow'});
Mongooseのドキュメントオブジェクトは非常に便利な内蔵方法を持っていますが、これらの方法はこのドキュメントオブジェクト自体にのみ適用され、集合またはモデル全体には適用されません.文書オブジェクトとモデルの違いは、ドキュメントオブジェクトはモデルの一例であり、モデルは抽象的であり、MongoDB集合のようなものであり、原型、方法、属性からなり、Nodeクラスとして現れている.Mongooseの集合は、Mongoskinや原生駆動の集合に似ています.厳密に言えば、モデル、集合、ドキュメントは違った種類のMongooseです.通常私たちは直接にMongooseの集合を使わず、モデルを使ってデータを操作するだけです.
user.save(function(err,doc){
  if(err==null){
    console.error(err);
    process.exit(1);
  }else{
    console.log(doc);
    process.exit(0);
  }
});
Mongooseの原型
プロトタイプはJSON形式のクラスで、ドキュメントの種類、属性などの情報が含まれています.必要であれば、いくつかの認証情報とデフォルト値も記憶してもいいです.業務ロジックやその他の重要な情報も含まれています.簡単に言えば、原型は文書の青写真として使えます.
モデル作成にはプロトタイプが必要です.すなわちプロトタイプはモデルとして発表されます.モデルの特性を使用する前に,それらのプロトタイプを先に定義する必要がある.Mongooseはモデルに定義されていない属性を無視します.
var userSchema = mongoose.Schma({
  name:String
})
Mongooseプロトタイプでサポートされているデータの種類には、
  • String標準JS/Node文字列タイプ、1文字のシーケンス.
  • Number規格JS/Nodeデジタルタイプ
  • Boolean標準JS/Nodeブールタイプ、真偽の値.
  • Buffer Nodeのバイナリタイプ、画像、アーカイブ、PDFなど.
  • Date ISO標準フォーマット日付、UTC標準グリニッジ時間.
  • Aray標準JS/Node配列タイプ
  • Schema.Types.ObjectId MongoDBの典型的な24文字の12バイトの16進数の数字文字列_idキーは、ドキュメントを時間順に並べ替えるために使用できます.Schema.Typesまたはmogoods.Schema.Typesを使って、取り替えることができます.
  • Schema.Types.Minxedのいずれかのタイプのデータは、ミックスタイプ、フレキシブルなタイプのオブジェクトは、Mongooseはその変更を無視しないので、オブジェクトを保存する前にMark Modified()を呼び出して、混入部分の変更が連続していることを確認します.
  • var ObjectId = mogoose.Schema.Types.ObjectId;
    var Mixed = mongoose.Schema.Type.Mixed;
    
    var bookSchema = mongoose.Schema({
      name:String,
      created_at:Date,
      updated_at:{type:Date, default:Date.now},
      published:Boolean,
      authorId:{type:ObjectId, required:true},
      description:{type:String, default:null},
      description:{body:String, image:Buffer},
      keywords:{type:[String], default:[]},
      active:{type:Boolean, default:false},
      version:{type:Number, default:function(){return 1;}},
      notes:Mixed,
      contributes:[ObjectId]
    })
    
    Mongooseはユーザー定義のタイプを作成できます.Mongooseのプロトタイプはユーザー定義のプラグインです.プラグインを作成することによって、現在のアプリケーションのすべてのプロトタイプに機能を拡張することができます.コードをより良く組織し、多重化するために、プロトタイプに静的な方法と実例的な方法を作成し、プラグインを開発し、フックなどを定義することができる.
    フックを使ってクリアなコードロジックを保持する
    複雑で多くの関連対象を持つアプリケーションでは、オブジェクトを保存する前に特定の論理を実行したいと思います.フックはこれらのロジックを格納するには良いところです.フックと方法はプロトタイプをモデルにコンパイルする前に入れなければなりません.
    ブックドキュメントを保存する前にPDFをアップロードしたいです.
    bookSchema.pre('save', function(next){
      //todo:     
      //todo:   PDF
      return next();
    });
    
    ブックドキュメントを削除する前に、この文書に対して他の処理を要求していないことを確認したいです.
    bookSchema.pre('remove', function(next){
      //todo     
      return next();
    });
    
    静的方法と具体的な方法をカスタマイズします.
    内に建てられたMongooseモデルの方法以外に、いくつかのカスタム方法を追加することができます.
    bookSchema.method({
      buy:function(quantity, customer,callback){
        var purchase = this;
        //todo             
        return callback(result);
      },
      refund:function(customer,callback){
        //todo     
        return callback(result);
      }
    })
    
    特定の文書オブジェクトがないか必要でないか、静的方法は非常に有用である.
    bookSchema.static({
      getZeroInventoryReport:function(callback){
        //todo           
        return callback(books);
      },
      getCountOfBooksById:function(bookId,callback){
        //todo     ID         
        return callback(count);
      }
    })
    
    Mongooseモデル
    Mongooseではモデルが最も基本的なオブジェクトであり、モデルをモデルにコンパイルします.
    var model = mongoose.model(name, schema)
    
    Mongooseモデルの静的方法
  • Model.create(data,calback)は新しいMongoose文書を作成してデータベース
  • に保存します.
  • Model.removeは、クエリー条件に一致するセット内のドキュメントを削除し、完了したらerrorパラメータのコールバック関数を呼び出します.
  • Model.find(query,「fields」,「options」,「calback(error,docs)」)は、クエリー条件に合致する文書を検索する
  • .