③ database数据库操作

1 mySQL

1.2 mySQL的安装配置

请自行查找相关资料

1.3 在NodeJs中使用mySQL

1.3.1 安装mysql模块

    npm install mysql

1.3.2 连接数据库

1. 使用连接对象方式
    var mysql = require('mysql');

    //创建连接对象,并配置参数
    var connection = mysql.createConnection({
        host     : 'localhost',
        user     : 'root',
        password : '',
        database : 'edusys'
    });
        
    // 连接数据库
    connection.connect();
        
    // 查询数据库
    connection.query('select * from student', function (error, results, fields) {
        if (error) throw error;
        console.log('The solution is: ', results);
    });
        
    // 关闭连接,释放资源
    connection.end();
2. 使用连接池方式(官方是推荐)
  • 使用连接池,默认会在连接池中创建10个连接对象(connectionLimit),使用完成自动放回连接池,不需要手动关闭
    var mysql = require('mysql');

    //创建连接池
    var pool  = mysql.createPool({
        host     : 'localhost',
        user     : 'root',
        password : '',
        port: 3306,
        database: 'edusys',
        multipleStatements: true
    });

    pool.query('select * from student', function(error, rows){
        console.log(rows);
    });
3. 封装模块
    // 配置参数
    // ...
    module.exports = {
        query: sql=>{
            return new Promise((resolve,reject)=>{
                pool.query(sql, function(err, rows){
                    if(err) return reject(err);
                    resolve(rows);
                });
            })
        }
    }

1.3.3 数据库操作:

1. query(sql,callback)
  • insert into <表名> [(<字段名1>[,..<字段名n > ])] values ( 值1 )[, (值n )];
    insert into MyGuests (firstname, lastname, email) values ('John', 'Doe', 'john@example.com');
  • delete from <表名> where <条件>
    --删除MyGuests表中id为1的数据
    DELETE FROM MyGuests where id=1;

    --删除所有数据
    DELETE FROM MyGuests
  • update <表名> set 字段=新值,… where 条件
   update MyGuests set name='Mary' where id=1;
  • select <字段1, 字段2, ...> from <表名> where <表达式>
    --查看表 MyGuests 中所有数据
    select * from MyGuests;

    --查看表 MyGuests 中前10行数据:
    select * from MyGuests order by id limit 0,10;
2. 条件控制语句: WHERE
  • SELECT * FROM tb_name WHERE id=3;
  • 相关条件控制符:

    • =、>、<、<>、IN(1,2,3......)、BETWEEN a AND b

    • AND、OR、NOT

    • LIKE用法中

      • % 匹配任意、

      • _ 匹配一个字符(可以是汉字)

    • LIMIT idx,qty:数量控制

      • SELECT * FROM goods LIMIT 2,5
    • IS NULL 空值检测

    • 排序ORDER BY

      • asc 升序(默认)

      • desc 降序

2 MongoDB

  • MongoDB是一个基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案,是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式

  • bson:是一种类json的一种二进制形式的存储格式,简称Binary JSON

2.1 下载与安装

2.2 配置数据库(V3.6)

  • 配置环境变量

  • 安装mongodb默认自动配置环境变量,方便在命令行中使用相关命令

  • 配置数据库保存目录

    mongod.exe --dbpath D:datamongodbdb
  • 启动成功后,可通过 http://127.0.0.1:27017 访问,但关闭后每次访问都必须重复以上操作

2.2.1 配置为 windows 服务,实现开机自动启动Mongodb

  1. 创建mongod.cfg文件,并写入以下内容
    systemLog:
        destination: file
        path: d:datamongodblogmongod.log
    storage:
        dbPath: d:datamongodbdb
  1. 执行以下命令,安装windows服务
   mongod.exe --config c:mongodbmongod.cfg --service --serviceName MongoDB --install

PS: MongoDB4.0后默认安装windows服务

2.3 命令行操作

2.3.1 连接数据库

  • mongo 连接到数据库并进行操作

  • mongod 显示数据库信息

2.3.2 常用命令(命令行)

  • 输入help可以看到基本操作命令
1. 数据库操作(Database)
  • 查看所有数据库: show dbs

  • 创建/切换数据库: use DBNAME

    • 如果数据库不存在,则创建数据库,否则切换数据库。
  • 查看当前使用的数据库: db

  • 显示当前db状态: db.stats()

  • 查看当前db的链接地址: db.getMongo()

  • 删除当前使用数据库: db.dropDatabase()

2. 集合操作(Collection)

用 use DBNAME 切换到当前数据库后,可以进行集合与文档的操作

  • 创建集合:

    • db.createCollection(NAME);

    PS:只有创建了集合,数据库才能真正成功创建

  • 查询所有集合:

    • show collections
  • 删除集合:

    • db.NAME.drop();
3. 文档操作(Document)

文档就是数据,这里的所有操作都是针对数据,格式:db.NAME.方法()

  • 增(插入数据):

    • insertOne(document)

    • inertMany([document,...])

    db.user.insertOne({username:'laoxie'});
    db.user.insertMany([{"username": 'laoxie'}, {'username': 'jingjing'}]);

当你插入一些文档时,MongoDB 会自动创建集合NAME

  • 删(删除数据)

    • deleteOne(query)

    • deleteMany(query)

  • 改(更新数据)

    • updateOne(query,newData)

    • updateMany(query,newData)

    //更新指定字段
    //查找name属性为tiantian的数据,并更新age属性为27
    db.user.updateOne({name:'tiantian'},{$set:{age:27}})

    // 找到所有年龄大于18的数据,并设置description为成年
    db.user.updateMany( { age: { $gt : 18 } } , { $set : { description : "成年"} } );
  • 查(查询数据):

    • 查询所有:db.NAME.find()

    • 按条件查询(支持多条件):db.NAME.find(query)

    • 查询第一条(只获取第一条):db.NAME.findOne(query)

    find()方法一般后一般使用toArray()方法把结果转成数组

        //查询user下所有数据
        db.user.find().toArray((err,result)=>{});
        
        // 查询user下年龄为38的
        db.user.find({age:38}).toArray()
    
        // 查询user下年龄大于38的
        db.user.find({age:{$gt:38}}).toArray()
    
        //利用pretty()方法格式化结果
        db.user.find().toArray().pretty();
    

2.3.3 查询条件

  • 比较查询

    • 大于:$gt

    • 小于:$lt

    • 大于等于:$gte

    • 小于等于:$lte

    • 非等于:$ne

  • 包含/不包含:$in/$nin

    db.goods.find({id:{$in:[10,18,26,13]}})
  • 或:$or
    db.user.find({$or:[{name:'laoxie'},{name:'jingjing'}]})
    db.user.find({$or:[{age:{$gt:18}},{description:"成年"}]})
  • 匹配所有:$all

  • 判断文档属性是否存在:$exists

    db.user.find({password:{$exists:true}})   //查找属性password存在的用户
    db.user.find({password:{$exists:false}})  //查找属性password不存在的数据
    db.user.find({age:{$in:[null],$exists:true}}) //查找age属性存在但值为null的数据
  • 正则表达式
    db.user.find({"name":/jack/i});//查找name属性包含jack的数据(不区分大小写)

2.3.4 筛选

  • 限制数量:db.表名.find().limit(数量);

  • 跳过指定数量:db.表名.find().skip(数量)

  • 排序:sort({key:1})

    • 1 : 升序

    • -1 : 降序

三个放在一起使用的时候,执行的顺序是先 sort(), 然后是 skip(),最后是 limit()

    // 把类型为字String的价格按数字排序
    db.goods.find().collation({numericOrdering:true}).sort({price:1})

    // 根据某个值修改文档中的另一个值(把price的值改成sale_price的8折)
    db.goods.find({price:0}).forEach(item=>{                
        db.goods.updateOne({_id:item._id},{$set:{price: item.sale_price*0.8}})
    })

2.4 NodeJS中使用mongodb

2.4.1 安装mongodb模块

    npm install mongodb --save

2.4.2 数据库操作

  • 连接mongoDB
    const mongodb = require('mongodb');
    const MongoClient = mongodb.MongoClient;

    //连接mongoDB
    MongoClient.connect("mongodb://localhost:27017", function(err, client) {
      if(err) throw err;
        // 连接数据库,无则自动创建
        let db = client.db('laoxie');
    });

2.4.3 集合操作

  • 创建集合:createCollection()

    • 格式:db.createCollection(name, options)
  • 使用集合:collection()

    • db.collection(name)
  • 删除集合:drop()

    • 格式:db.COLLECTION_NAME.drop(callback)
    db.createCollection('site', function (err, res) {
        if (err) throw err;
        console.log("创建集合!");
        db.close();
    });

2.4.4 文档操作

同上命令行操作 <文档操作(Document)>

2.5 MongoDB的导入导出

  • 导出mongoexport

把一个collection导出成JSON格式或CSV格式的文件。可以通过参数指定导出的数据项,也可以根据指定的条件导出数据

* 格式:`mongoexport -d dbname -c collectionname -o file --type json/csv -f field`

* 参数说明:

    * -d :数据库名

    * -c :collection名

    * -o :输出的文件名

    * --type : 输出的格式,默认为json

    * -f :输出的字段,如果-type为csv,则需要加上-f "字段名"
    mongoexport -d mytest -c goods -o D:/data/goods.json --type json -f  "_id,name,price,img_url,add_time"
  • 导入mongoimport

    • 格式:mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f field

    • 参数说明:

      • -d :数据库名

      • -c :collection名

      • --type :导入的格式默认json

      • -f :导入的字段名

      • --headerline :如果导入的格式是csv,则可以使用第一行的标题作为导入的字段

      • --file :要导入的文件

     mongoimport -d mongotest -c goods --file D:/data/goods.json --type json

2.6 MongoDB备份与恢复

  • 备份

    • 格式:mongodump -h dbhost -d dbname -o dbdirectory

    • 参数说明:

      • -h: MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017

      • -d: 需要备份的数据库实例,例如:test

      • -o: 备份的数据存放位置,例如:D:/mongodump/

      当然该目录需要提前建立,这个目录里面存放该数据库实例的备份数据。

        mongodump -h 127.0.0.1:27017 -d mytest -o D:/mongodump/
    
  • 恢复

    • 格式:mongorestore -h dbhost -d dbname --dir dbdirectory

    • 参数或名:

      • -h: MongoDB所在服务器地址

      • -d: 需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2

      • --dir: 备份数据所在位置,例如:D:/mongodump/

      • --drop: 恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用!

        mongorestore -h 192.168.17.129:27017 -d mytest --dir D:/mongodump/
    
原文地址:https://www.cnblogs.com/pleaseAnswer/p/15001007.html