Js全栈开发之NoSQL数据库使用(MongoDB和Redis)

    技术2026-08-06  43

    NoSQL数据库使用

    接着上一篇《Js全栈开发之Sequelize用法详解(MySQL)》来继续学习koa2,上一篇总结了MySQL等关系型数据库的使用和ORM框架Sequelize的用法,本篇将汇总NoSQL类数据库的用法,如MongoDB和Redis等,总结一些平时比较常用的api及语法。

    文章目录

    NoSQL数据库使用1. MongoDB使用1.1 mongoose库安装1.2 数据库连接1.3 声明创建保存model对象1.4 查询修改删除对象数据 2. mongoose 官方文档3. Redis使用3.1 安装Redis库3.2 连接Redis3.3 使用Redis3.4 使用同步方式 4. Redis参考博文

    1. MongoDB使用

    1.1 mongoose库安装

    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. mongoose 官方文档

    英文文档: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.htmlNode.js Redis 的使用 https://blog.csdn.net/q282176713/article/details/80580886
    Processed: 0.021, SQL: 9