Jsフルスタック開発のNoSQLデータベース使用(MongoDBとRedis)

41651 ワード

NoSQLデータベース使用{{NoSQLでーたべーす:しよう}}
続いて前編『Js全桟開発のSequelize用法詳細解(MySQL)』で引き続きkoa 2を学び、前編ではMySQLなどの関係型データベースの使用とORMフレームワークSequelizeの使い方をまとめ、本編ではMongoDBやRedisなどのNoSQL系データベースの使い方をまとめ、普段よく使われているapiや文法をまとめます.
文書ディレクトリ
  • NoSQLデータベース
  • を使用
  • 1. MongoDBは
  • を使用
  • 1.1 mongoseライブラリインストール
  • 1.2データベース接続
  • 1.3宣言保存モデルオブジェクトの作成
  • 1.4クエリー修正削除対象データ
  • 2. mongose公式ドキュメント
  • 3. Redis使用
  • 3.1 Redisライブラリ
  • をインストール
  • 3.2接続Redis
  • 3.3 Redis
  • を使用
  • 3.4同期方式
  • を用いる.
  • 4. Redisリファレンスブログ
  • 1.MongoDB使用
    1.1 mongoseライブラリのインストール
    npm install mongoose -save
    

    1.2データベース接続
    //      
    const mongoose = require('mongoose');
    mongoose.connect('mongodb://xxx.xxx.xxx.xxx:27017/admin',{
        user:'root',
        pass:'xxxxxx',
        poolSize: 10,
        useNewUrlParser: true,
        useUnifiedTopology: true 
    });
    const mongodbConn = mongoose.connection;
    mongodbConn.on('error', err => {
        console.error(err);
    });
    mongodbConn.once('open', ()=> {
        console.log('    !')
    })
    

    1.3 modelオブジェクトの保存を宣言する
    const mongodbConn = mongoose.connection;
    //      model  
    const cateqorySchema = new mongoose.Schema({
        name:{
            type:String,
            index:true,
            unique:true
        },
        description: String,
        createArt:{
            type:Date,
            default: Date.now
        }
    });
    const Category = mongodbConn.model('Category',cateqorySchema);
    //       1
    const categoryObj = new Category({
        name:'  ',
        description:'       '
    });
    categoryObj.save(err =>{
        if(err){
            console.error(err)
            return;
        }
        else{
            console.log('save success!');
        }
    });
    //       2
    Category.create({
        name:'  ',
        description:'     '
    },(err, category)=>{
        if(err){
            console.error(err);
        }else{
            console.log(category);
        }
    })
    
    

    1.4クエリー削除対象データの変更
    //     
     Category.find({
        name: '  '
    },(err,res)=>{
        if(err){
            console.log(err)
        }else{
            console.log(res);
        }
        mongodbConn.close();
    });
    //     
    Category.update({
        name: '  '
    },{
        description:'    '
    }).then((err,res)=>{
        if(err){
            console.log(err)
        }else{
            console.log(res);
        }
        mongodbConn.close();
    });
    //     
    Category.update({
        name: '  '
    }).then((err,res)=>{
        if(err){
            console.log(err)
        }else{
            console.log(res);
        }
        mongodbConn.close();
    });
    

    2.mongose公式ドキュメント
  • 英語ドキュメント:https://mongoosejs.com/
  • 中国語ドキュメント:http://www.mongoosejs.net/

  • 3.Redis使用
    3.1 Redisライブラリのインストール
    npm install redis -save
    

    3.2接続Redis
    const redis = require('redis');
    const redisLink = 'redis://xxx.xxx.xxx:6379'
    const opts = {
    	auth_pass: 'xxxxxx',
    }
    const redisClient = redis.createClient(redisLink, opts)
    redisClient
    .on('error', err => console.log('------ Redis connection failed ------' + err))
    .on('connect', () => console.log('------ Redis connection succeed ------'))
    

    3.3 Redisの使用
    
    //      
    redisClient.set('name','dahlin',redis.print)
    redisClient.get('name', function(err,value){
        if(err) throw err;
        console.log('name:'+value);
    });
    //        
    redisClient.hmset('dahlin',{
        'item':'koa2learn',
        'chapter':'use redis'
    });
    redisClient.hgetall('dahlin', function(err,obj){
        console.log(obj)
    });
    redisClient.hkeys("dahlin",function(err,replies){
        replies.forEach(function(reply,i){
            console.log(i+"->"+reply);
        })
    });
    //        
    redisClient.lpush('mylist','koa1',redis.print);
    redisClient.lpush('mylist','koa2',redis.print);
    redisClient.lrange('mylist',0,-1,function(err,items){
        if(err){
            console.log(err);
        }else{
            items.forEach(function(item,i){
                console.log(i+":"+item);
            })
        }
    });
    //        
    redisClient.sadd('myset','koa1',redis.print);
    redisClient.sadd('myset','koa2',redis.print);
    redisClient.smembers('myset',function(err,items){
        if(err){
            console.log(err);
        }else{
            console.log(items);
        }
    });
    

    3.4同期方式の使用
    //  redis  util/redis.js
    const redis = require("redis");
    const { promisify } = require('util');
    //Redis       http://doc.redisfans.com/index.html  
    
    /**
     * 
     * @param {*} db       DB,     DB 0
     */
    function Client(num){
        let db = num || 0
        let client = redis.createClient({db});
    
        //        ,        
        this.exists =  promisify(client.exists).bind(client);
        this.keys =  promisify(client.keys).bind(client);
    
        this.set = promisify(client.set).bind(client);
        this.get = promisify(client.get).bind(client);
        this.del = promisify(client.del).bind(client);
        this.incr = promisify(client.incr).bind(client);
        this.decr = promisify(client.decr).bind(client);
    
        this.lpush = promisify(client.lpush).bind(client);
    
        this.hexists =  promisify(client.hexists).bind(client);
        this.hgetall = promisify(client.hgetall).bind(client);
        this.hset = promisify(client.hset).bind(client);
        this.hmset = promisify(client.hmset).bind(client);
        this.hget = promisify(client.hget).bind(client);
        this.hincrby = promisify(client.hincrby).bind(client);
        this.hdel = promisify(client.hdel).bind(client);
        this.hvals = promisify(client.hvals).bind(client);
        this.hscan = promisify(client.hscan).bind(client);
    
        this.sadd = promisify(client.sadd).bind(client);
        this.smembers = promisify(client.smembers).bind(client);
        this.scard = promisify(client.scard).bind(client);
        this.srem = promisify(client.srem).bind(client);
        return this;
    }
    module.exports = Client
    
    //       
    const Client = require('../util/redis')
    let client = new Client(3); //gateway REDIS    DB  0
    let old = await client.exists(ip);//   
    if (!old) {
        await client.set(ip, value);
    }
    
    

    4.Redis参考博文
  • node redisの使用https://www.w3cways.com/2364.html
  • Node.js Redisの使用https://blog.csdn.net/q282176713/article/details/80580886