MongoDB数据库简介:

使用MongoDB的好处是不用SQL语句,它提供了对应的API,其功能和MYSQL基本相同,是最像关系型数据库的非关系型数据库;不需要设计表的结构,文档相当于json

关系型数据库:表就是关系,表与表之间的关系,所有的关系型数据库都要通过SQL语言来操作。

非关系型数据库:比较灵活,没有表,有的就是键值对的形式。

MongoDB使用步骤如下:

// 1.安装步骤:
        // 1.打开官网:https://www.mongodb.com ---> software ---> 选择免费Community server下载,注意一定要选择msi格式。
        // 2.将下载的程序双击打开,点击下一步,出现custom和complete时选择custom自定义目录安装,不勾选install MongoDB compass,最后点击install按照提示操作,finsh完成安装。
        // 3.打开命令行mongod --version查看版本,如果显示未安装,就去改变path指向的变量(复制mongodb的bin文件路径---我的电脑---属性---高级系统设置---环境变量---编辑path----新建添加复制的路径)
    
    // 2.启动:
        // 1.打开命令行键入命令:mongod 回车  , 如果启动不成功,则需要在安装文件所在盘符的根目录手动新建:data/db/    or   服务面板找到MongoDB服务启动
        // 2.改变数据存储目录键入命令:mongod --dbpath=数据储存目录路径
    
    // 3.停止:在控制窗口Ctrl + C    or    服务面板找到MongoDB点击停止  
    
    // 4.连接数据库:新打开命令窗口键入命令:mongo 回车默认连接本机数据库    or 可视化面板       ,退出a键入命令:exit
    
    // 5.其它基本命令:1.show dbs---显示所有数据库  
                   // 2.use 数据库名----切换到指定数据(没有回自动建立),实际操作是在node中操作,一般不在命令窗口操作。
    
    
    
    // 在node中操作MongoDB:
        // 1.使用官方的mongodb包操作:https://www.github.com/mongodb/node-mongodb-native(查阅文档使用)
        // 2.也可以使用第三方基于mongodb的包 mongoose 操作:http://mongoosejs.com/(查阅文档使用),步骤:
                // 1.命令行键入命令:npm install mongoose --save;-----------使用npm安装mongoose
                // 2.const mongoose = require('mongoose');-----------------载入mongoose模块
                // 3.mongoose.connect('mongodb://localhost/test', {useNewUrlParser: true})-------连接MongoDB数据库
                // 4.const db = mongoose.connection;  db.on('error', console.error.bind(console, 'connection error:'));  db.once('open', function() {// we're connected!})-----测试数据库连接是否成功,可以不用写这段代码
                // 5.const kittySchema = new mongoose.Schema({name: String})--------从Schema中派生一切,可以不用写这段代码
                // 6.const Kitten = mongoose.model('Kitten', kittySchema)------模式编译成模型
                // 7.const silence = new Kitten({ name: 'Silence' });  console.log(silence.name); --------模型是用来构造文档的类,创建一个文档(实例化一个Kitten)
                // 8.Kitten.save(function (err) {if (err) return console.error(err);console.log('Kitten')})-------数据持久化
                // 9.Kitten.find(function (err) {if (err) return console.error(err);console.log('Kitten');})------查询数据

在node中使用mongoose:

// 在安装完mongoose的情况下使用:
    // 1.载入mongoose模块:
    var mongoose = require('mongoose');
    // 2.连接数据库:
    mongoose.connect('mongodb://localhost/test',{useMongoClient:true});
    // 3.这段代码加不加都可以,后面学习promise时会具体讲解:
    mongoose.Promise = global.Promise;
    // 4.创建一个模型(设计数据库):
    var Cat = mongoose.model('Student',{name:String});//Cat为类似表名,自己会生成小写复数的集合名,把表称作集合
    // 5.持久化:
    jack.save(function (err) {
      if (err) {
        console.log(err);
      } else {
        console.log('meow 响应出结果');
      };
    });

mongoose中增删改查:

var mongoose = require('mongoose');
    var Schema = mongoose.Schema;
    // 1. 连接数据库:指定连接的数据库可以不需要存在,当你插入第一条数据之后就会自动被创建出来:
    mongoose.connect('mongodb://localhost/itcast');
    
    // 2. 设计文档结构架构(表结构),字段名称就是表结构中的属性名称,约束的目的是为了保证数据的完整性,不要有脏数据:
    var userSchema = new Schema({
        username: {
            type: String,
            required: true // 必须有
        },
        password: {
            type: String,
            required: true
        },
        email: {
            type: String
        }
    })
    
    // 3. 将文档结构发布为模型
    //    mongoose.model 方法就是用来将一个架构发布为 model
    //    第一个参数:传入一个大写名词单数字符串用来表示你的数据库名称
    //                 mongoose 会自动将大写名词的字符串生成 小写复数 的集合名称
    //                 例如这里的 User 最终会变为 users 集合名称
    //    第二个参数:架构 Schema,即文档结构架构
    //    返回值:模型构造函数
    var User = mongoose.model('User', userSchema);
    
    
    // 4. 当我们有了模型构造函数之后,就可以使用这个构造函数对 users 集合中的数据增删改查:
    
    // 新增数据:
    var admin = new User({
      username: 'zss',
      password: '123456',
      email: 'admin@admin.com'
    });
    
    admin.save(function (err, ret) {
      if (err) {
        console.log('保存失败');
      } else {
        console.log('保存成功');
        console.log(ret);
      }
    });
    
    
    //查询数据:
    User.find(function (err, ret) {
      if (err) {
        console.log('查询失败')
      } else {
        console.log(ret)
      }
    })
    
    User.find({
      username: 'zs'
    }, function (err, ret) {
      if (err) {
        console.log('查询失败')
      } else {
        console.log(ret)
      }
    })
    
    User.findOne({
      username: 'zs'
    }, function (err, ret) {
      if (err) {
        console.log('查询失败')
      } else {
        console.log(ret)
      }
    })
    
    
    // 删除数据:
    User.remove({
      username: 'zs'
    }, function (err, ret) {
      if (err) {
        console.log('删除失败')
      } else {
        console.log('删除成功')
        console.log(ret)
      }
    })
    
    // 更新数据:
    
    User.findByIdAndUpdate('5a001b23d219eb00c8581184', {
      password: '123'
    }, function (err, ret) {
      if (err) {
        console.log('更新失败')
      } else {
        console.log('更新成功')
      }
    })

数据可视化工具mongobooster:

// 数据可视化工具MongoBooster的使用步骤:
    // 1.下载地址:https://nosqlbooster.com/
    // 2.下载后双击,一路点击next
    // 3.双击打开,create一个数据库并测试连接是否成功
    // 4.对数据进行修改
    
    
    
    
    // node操作数据库:
    
    //数据库操作模块
    var mongoose = require('mongoose')
    
    // 连接到mongoose数据库当中
    // connect连接     content内容   端口号(27017为固定端口号)
    
    // 端口号后面为数据库名称,如果有这个数据库,则直接连接,如果没有数据库则先创建,在连接
    mongoose.connect('mongodb://127.0.0.1:27017/test', function(err) {
        if (err) {
            console.log('数据库连接失败')
        } else {
            console.log('数据库连接成功')
        }
    })
    
    // 数据库 =>数据表  一个数据库里面可以有多个不同类型的数据表
    // 数据表 => 数据  一个数据表里面可以有多个不同类型的数据
    
    // schema 图表
    var messageSchema = new mongoose.Schema({
        // 该数据为字符串类型
        connect: String,
        name: String,
        age: Number,
        hasStar: Boolean
    
    })
    // model  模型
    var Message = mongoose.model('messageBox', messageSchema)
    var first = new Message({
        content: '今天是周日',
        name: '小熊',
        age: 3,
        hasStar: false
    })
    
    // 保存
    first.save(function(err) {
        if (err) {
            console.log('保存失败')
        } else {
            console.log('保存成功')
        }
    })
    
    // fs.readFile(,function(err,data))
    Message.find(function(err, data) {
        if (err) {
            console.log('数据库读取失败')
        } else {
            //   读取的时候返回的是数组[ ]
            console.log('数据库读取成功')
            console.log(data)
        }
    })


笔者:苦海