mongose学習ノート

12449 ワード

一、紹介
1.概要
mongoseモジュールは、nodeとデータベースmongodbとの間の操作を簡略化するために使用され、簡単なAPIを通じてデータベースを操作する行為をjavascriptオブジェクトを操作する行為に変えることを目的としている(nodeJSを用いて開発されているため、javascriptに対してより親近感を持つことが多い).主なAPIは3つあります.
  • mongoose.接続データベースはmongodbにデータベースがない場合に自動的に作成されます.注意:mongodbはmysqlと同じで、多くのサブデータベースを作成できます.各サブデータベースの下に独自のテーブルがあります.
  • mongoose.Schema mongoseモジュールは、サブデータベースの下にあるテーブルを作成します.
  • mongoose.Model mongoseモジュールでは、テーブルに対応するjavascriptオブジェクトを作成し、このオブジェクトを操作することでデータベースの削除を完了できます.

  • 2.環境要求
    使用mongoose取付要求nodejsmongodb 、もちろん再取付しましたmongodb 最高でした.
    nodejsインストールチュートリアル
    【mongodb+クライアント】図文インストールチュートリアル
    3.インストール
    mongoseはサードパーティ製パッケージで、使用前にインストールします.
    $ npm install mongoose
    

    二、APIドキュメント
    1.データベースへの接続
    var mongoose = require('mongoose');
    const DB_URL = 'mongodb://localhost:27017/testuseage';
    // mongoose        API,     
    mongoose.connect(DB_URL);   
    
    // mongoose         ,          :connected、error、disconnected,           
    //              ,           
    mongoose.connection.on('connected', function () {
        console.log('Mongoose connection open to ' + DB_URL);
    });
    //             ,     mongodb      
    mongoose.connection.on('error', function (err) {
        console.log('Mongoose connection error: ' + err);
    });
    //            ,           
    mongoose.connection.on('disconnected', function () {
        console.log('Mongoose connection disconnected');
    });
    

    説明:DB_URL = 'mongodb://localhost:27017/testuseage';については、2分割可能mongodb://localhost:27017/およびtestuseage.
  • mongodb://localhost:27017/
  • この部分は通常固定表記であるmongodb接続を教えたのはmongodbデータベースであって、mysqlその他のデータベースではない.
  • localhostmongodbデータベースがある機器のipアドレスは、通常自分でプレイしても自分のコンピュータにインストールされ、ipのデフォルトはlocalhost;
  • 27017この数字はmongodbのデフォルト接続ポート番号ですが、インストール時に変更がなければこれですが、インストール時にポート番号を変更した場合は、ここに修正したポート番号を書いてください.

  • testuseagemongodb中性子データベースの名前mongodbmysqlと、複数のデータベースを作成でき、各データベースの下に独自のテーブルがある.mongodbにこのサブデータベースがない場合、自動的に作成されます.

  • 2.データベース表の作成
    var mongoose = require('mongoose');
    
    //           
    var Schema = mongoose.Schema;
    //                ,      
    var UserSchema = new Schema({
        username: {type: String, index: true, required: true},
        userpwd: String,
        userage: {type: Number, min: 18, max: 100},
        logindate: {type: Date, default: new Date()}
    });
    

    上のコードの
  • indexインデックスを作成します.これは他のデータベースを使ったことがある人はどういう意味か知っているはずです.
  • defaultデフォルト値、新規データ作成時に当該フィールドに値が付与されていない場合は、デフォルト値を使用する.
  • requiredブール値、必須ベリファイア;
  • min数値、最小値;
  • max数値、最大値;
  • lowercaseブール値、小文字に変換;
  • trimブール値、前後スペースを除く
  • type対応するフィールドのデータ型です.typeの属性が1つしかない場合は、typeのタイプを直接書くことができます.また、他のデータ型は以下のように収集されています.
  • String
  • Number
  • Boolean | Bool
  • Array
  • Buffer
  • Date
  • ObjectId | Oid
  • Mixed


  • 3.テーブルに対応するjavascriptオブジェクトの作成
    //     UserSchema     javascript   ,                      
    var User = mongoose.model('User', UserSchema);
    

    4.データを追加
  • 4.1新規APIのsave方法(インスタンスオブジェクト操作方法)
    //    javascript        ,        User    ,      user        
    var user = new User({
        username: 'Tracy Mc',
        userpwd: 'abcd',
        userage: 37,
        logindate: new Date()
    });
    
    //         save                 
    user.save(function (err, res) {
        if (err) {
            console.log('Error: ' + err);
        } else {
            console.log('Res: ' + res);
            
        }
    });
    
  • 4.2新規APIのcreate方法(コンストラクタ操作方法)
    User.create({
        username: 'bob james',
        userpwd: '321',
        userage: 32,
        logindate: new Date()
    }, function (err, res) {
        if (err) {
            console.log('Error: ' + err);
        } else {
            console.log('Res: %o', res);
        }
    });
    
  • 5.データの変更
  • 5.1 APIの修正update方法update(condition, updateobj, multi, callback);
  • condition変更されたオブジェクトはデータベースに既に存在するデータであるべきであり、ownobjはクエリ条件であり、以下の例ではクエリusernameがTracy Mcのオブジェクトが変更される.
  • updateobj変更するフィールドは、以下の例ではユーザパスワードフィールドを変更する.
  • multi固定書き方{multi: false}ownobjで照会されたデータが1つだけではない可能性があるので、ここでfalseに設定した場合、何件のデータを照会しても、常に1つ目のデータを修正する.
  • callbackコールバック関数は、現在の更新が成功したか否かを判断する.次の例では、res = { n: 1, nModified: 1, ok: 1 }nownobjがクエリしたオブジェクトの個数を示し、nModified実際に修正したオブジェクトの個数、okは修正に成功したオブジェクトの個数である.
  • //     
    var condition = {'username': 'Tracy Mc'};
    var updatestr = {'userpwd': 'cccc'};
    var multi = {multi: false};
    User.update(condition, updatestr, multi, function (err, res) {
        if (err) {
            console.log('Error: ' + err);
        } else {
            console.log('Res: %o', res);
        }
    });
    
  • 5.2 APIの修正findByIdAndUpdate方法findByIdAndUpdate(id, updateobj, callback)
  • idそのデータのidを修正する.
  • updateobj変更するフィールドは、以下の例ではユーザパスワードフィールドを変更する.
  • callbackコールバック関数は、現在の更新が成功したか否かを判断する.パラメータresidに基づいてクエリされたデータオブジェクト.
  • var id = '59a3c01e50f4b32148fe49a5';
    var updatepwd = {'userpwd': 'vvvv'}
    User.findByIdAndUpdate(id, updatepwd, function (err, res) {
        if (err) {
            console.log('Error: ' + err);
        } else {
            console.log('Res: %o', res);
        }
    });
    
    // res = { _id: 59a3c01e50f4b32148fe49a5,
    //   username: 'bob james',
    //   userpwd: '321',
    //   userage: 32,
    //   logindate: 2017-08-28T07:02:54.537Z,
    //   __v: 0 }
    

    6.データの削除
  • 6.1 APIを削除するremove方法remove(condition, callback)
  • condition変更されたオブジェクトはデータベースに既に存在するデータであるべきであり、ownobjはクエリ条件であり、以下の例ではクエリusernameがbob jamesのオブジェクトが変更される.
  • callbackコールバック関数は、現在の更新が成功したか否かを判断する.次の例では、res = { n: 1, ok: 1 }nownobjがクエリしたオブジェクトの数を示し、okは削除に成功したオブジェクトの数である.
  • var condition = {'username': 'bob james'};
    User.remove(condition, function (err, res) {
        if (err) {
            console.log('Error: ' + err);
        } else {
            console.log('Res: %o', res);
        }
    });
    
  • 6.2 APIの修正findByIdAndRemove方法findByIdAndRemove(id, callback)
  • idそのデータのid値を削除する.
  • callbackコールバック関数は、現在の削除が成功したか否かを判断する.resはidクエリに基づいてクエリされたオブジェクトです.
  • var id = '59a3c70b2be0770b846a752e';
    User.findByIdAndRemove(id, function (err, res) {
        if (err) {
            console.log('Error: ' + err);
        } else {
            console.log('Res: %o', res);
        }
    });
    

    7.クエリーデータ
  • 7.1条件照会find(condition, showfields, callback)
  • conditionクエリー条件、対象フォーマット、クエリー条件が書かれていない場合はクエリーのすべてを表し、以下の例ではクエリー年齢が23歳のデータである.
  • showfields表示フィールド、オブジェクトフォーマット、フィールド値1表示、値0表示非表示
  • callbackコールバック関数.resはクエリされたデータ、配列フォーマットである.
  • var condition = {'userage': 23};
    var showfields = {'username': 1, '_id': 0}
    User.find(condition, showfields, function (err, res) {
        if (err) {
            console.log('Error: ' + err);
        } else {
            console.log('Res: %o', res);
        }
    });
    
    // res = [ { username: 'dkvirus' } ]
    
  • 7.2条件演算子データベースにおいて、条件演算子とその重要性、例えば、20歳以上30歳未満のすべてのデータを取得する.
    var condition = {userage: {$gte: 20, $lte: 30}};
    User.find(condition, function (err, res) {
        if (err) {
            console.log('Error: ' + err);
        } else {
            console.log('Res: %o', res);
        }
    });
    
    常用演算子収集:
    $or                
    
    $nor                  
    
    $gt               
    
    $gte                 
    
    $lt               
    
    $lte                 
    
    $ne                    
    
    $in                        
    
    $nin                        
    
    $all                        
    
    $regex              ,      
    
    $size                  
    
    $maxDistance          ,  (  LBS)
    
    $mod                  
    
    $near                ,       (  LBS)
    
    $exists                 
    
    $elemMatch                 
    
    $within               (  LBS)
    
    $box                 ,    (  LBS)
    
    $center                 ,    (  LBS)
    
    $centerSphere         ,    (  LBS)
    
    $slice                     (        , N  M   )
    
  • 7.3ファジイクエリーファジイクエリーファジイクエリーファジイクエリーファジイクエリーファジイクエリーファジイ次の例では、クエリユーザ名にアルファベットcが含まれているデータについて、大文字と小文字を区別しない.
    var condition = {'username': {$regex: /c/i}};
    User.find(condition, function (err, res) {
        if (err) {
            console.log('Error: ' + err);
        } else {
            console.log('Res: %o', res);
        }
    });
    
  • 7.4 IDで検索findById(id, callback)
    var id = '59a3b25db0ddb621701db1cb';
    User.findById(id, function (err, res) {
        if (err) {
            console.log('Error: ' + err);
        } else {
            console.log('Res: %o', res);
        }
    });
    
  • 7.5検索データ取得個数count(condition, callback)
    var condition = {userage: {$gte: 20, $lte: 30}};
    User.count(condition, function (err, res) {
        if (err) {
            console.log('Error: ' + err);
        } else {
            console.log('Res: %o', res);
        }
    });
    
  • 7.6ページングクエリチェーン書き方ページングクエリを実現する.
    var pageSize = 5;       //        
    var currentPage = 1;    //      
    var sort = {'logindate': -1};   // -1     ,1     
    var condition = {};     //     
    var skipnum = (currentPage - 1) * pageSize; //    
    
    User.find(condition)    //              
        .skip(skipnum)      //       skipnum       
        .limit(pageSize)    //   skipnum        pageSize    
        .sort(sort)         //          
        .exec(function (err, res) {     //        res 
            if (err) {
                console.log('Error: ' + err);
            } else {
                console.log('Res: %o', res);
            }
        });
    

  • 三、フック関数
    林子はどんな鳥でもいるが、mongoseモジュールは、次々と現れるビジネスロジックを処理するための他の2つの傍受方法を提供している.
    すべてのメソッドがリスニングできるわけではありません.リスニングできるメソッドは次のように収集されます.
  • save
  • remove
  • findOneAndRemove
  • update
  • findOneAndUpdate
  • find
  • findOne
  • count
  • init
  • validate

  • 1. pre(method, callback)
    methodメソッドを実行する前にpreメソッドを実行します.
    var Schema = mongoose.Schema;
    var UserSchema = new Schema({ username: 'String' });
    
    // pre      save           
    UserSchema.pre('save', function (next) {
        cosnole.log('      ');
        next();
    });
    
    var User = mongoose.model('User', UserSchema);
    var user = new User({
        username: 'dkvirus'
    });
    user.save(function (err, res) {
        if (err) {
            console.log('Error: ' + err);
        } else {
            console.log('Res: ' + res);
            
        }
    });
    

    2. post(method, callback)
    methodメソッドが実行されるとpostメソッドが実行されます.
    var Schema = mongoose.Schema;
    var UserSchema = new Schema({ username: 'String' });
    
    // post      save            
    UserSchema.post('save', function (res) {
        console.log('      ,     Id : ' + res._id);
    });
    
    var User = mongoose.model('User', UserSchema);
    var user = new User({
        username: 'dkvirus'
    });
    user.save(function (err, res) {
        if (err) {
            console.log('Error: ' + err);
        } else {
            console.log('Res: ' + res);
            
        }
    });
    

    四、参考文章
    1.Mongooseの紹介と入門
    2.nodeサードパーティライブラリの【mongoseモジュール】
    3.Mongoose初使用まとめ