Node.js中使用MongoDB

MongoDB

1. 关系型数据库和非关系型数据库

  • 表就是关系
  • 表与表之间存在关系
    • 所有的关系型数据库都需要通过 sql 语言来操作
    • 所有的关系型数据库在操作之前都需要设计表结构
    • 而且数据库还支持约束
    • 唯一的
    • 主键
    • 默认值
    • 非空
  • 非关系型数据库 非常灵活
  • 有的非关系型数据库就是 key-value 键值对
  • 但是在MongoDB是长得最像关系型数据库的非关系型数据库
    • 数据库 — 数据库
    • 数据表 — 集合(数组)
    • 表记录 — 文档对象
  • MongoDB 不需要设计表结构
  • 你可以任意往里面寸数据,没有结构性一说

启动和关闭数据库

启动:

#mongodb 默认使用执行 mongod 命令所处盘符根目录下的 /data/db/ 作为自己的数据存储目录
#所以在第一次执行该命令之前先自己手动新建一个 /data/db
#mongodb需要在环境变量中配置,在path中加入 安装目录的/bin路径
mongod

如果想要修改默认的数据存储目录,可以:

mongod --dbpath=数据存储目录路径

停止:

#在开启服务的控制台,直接 ctrl+c 即可停止
#或者直接关闭开启服务的控制台也可以

连接数据库

连接:

#该命令默认连接本机的 MongoDB 服务
mongo

退出:

# 在连接状态 命令行输入 exit 退出连接
exit

基本命令

  • show dbs
    • 查看显示数据库
  • db
    • 查看当前操作的数据库
  • use 数据库名称
    • 切换到指定的数据库 (如果没有会新建)
  • 插入数据

在Node中使用MongoDB

默认端口是 27017

  • 使用官方的 mongodb 包来操作

  • 或者 使用第三方 mongoose 来操作

    • 第三方包: mongoose 是基于 mongodb进行再一次封装

    • 安装:
    npm i mongoose
    设计Schema 发布 model
    // 0.引包
    var mongoose = require('mongoose')
    // 1.连接数据库,在这里是连接本地的test数据库,数据库如果不存在,在插入第一条数据时,会自动创建
    mongoose.connect('mongodb://localhost/test')
    mongoose.Promise = global.Promise
    // 2.设计集合结构(表结构)
    //字段名称就是表结构中的属性名称
    //约束属性的值,保证数据的完整性
    var Schema = mongoose.Schema
    var userSchema = new Schema({
        username:{
            type:String,
            required:true //表示必须有
        },
        password:{
            type:String,
            required:true
        },
        email: {
            type:String
        },
        gender:{
            type:number,
            enum:[0,1], //只能是0或1
            default:0   //默认为0
        }
    })
    // 3.将文档结构发布为模型
    // mongoose.model方法就是用来将一个架构发布为model
    // 第一个参数:传入一个大写名词单数字符串用来表示你的数据库名
    //称,mongoose会自动将大写名词的字符串生成 小写复数 的集合名称
    // 例如这里的 User 最终会变为 users的集合名称
    // 第二个参数: 架构 Schema
    // 返回值: 模型构造函数
    var User = mongoose.model('User',userSchema)
    //如果要导出则
    module.exports = User

    在传Date的时候,如果设置Date.now(获取现在时间的时间戳) 不能带“()”,因为会立刻调用。所以要传一个方法,在new Schema的时候,它看到这里传的是一个方法就会自动进行调用获取当前时间戳。

    new Schema({
      creatDate: {
        type: Date,
        default: Date.now  //当你没有传Date值时,mongoose会调用default的值,当发现是方法时就会进行调用,获取返回值
      }
    })
    增添数据
    // 4.当我们有了这个模型构造函数之后,就可以使用这个构造函数对users中的数据进行操作(增删改查)
    var admin = new User({
        username:"admin",
        password:"123456",
        email:"admin@admin.com"
    })
    admin.save(function (err) {
        if (err) {
            console.log(err)
        }else {
            console.log('success')
        }
    })
    查询数据
    //查询所有的数据
    User.find(function (err,result) {
        if (err) {
           console.log('查询失败') 
        } else {
            console.log(result)
        }
    })
    //查询指定条件的数据
    User.find({
        username:'admin'
    },function (err,result) {
        if (err) {
           console.log('查询失败') 
        } else {
            console.log(result)
        }
    })
    //查询指定条件的单个数据
    User.findOne({
        username:'admin'
    },function (err,result) {
        if (err) {
           console.log('查询失败') 
        } else {
            console.log(result)
        }
    })
    条件查询
    //$or表示或,只要符合其中一个条件就返回
    User.findOne({
        $or: [
            {key1:value},{key2:value}
        ]
    },function () {...})
    删除数据
    User.remove({
        username: 'admin'
    },function (err, result){
        if (err) {
           console.log('删除失败') 
        } else {
            console.log('删除成功')
        }
    })

    根据指定条件删除

    User.findOneAndRemove(conditions,[options],[callback])
    修改数据
    User.findByIdAndUpdate('5s566256dad2654',{
        password:'123'
    },function (err,result) {
        if (err) {
           console.log('修改失败') 
        } else {
            console.log('修改成功')
        }
    })

    根据指定条件

    User.findOneAndUpdate(conditions,[options],[callback])

    注意事项

    获得数据中的id需要用 model._id,并且id会带引号 需要replace(/"/g,'')去除

    如果有误希望还望指正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值