Node.js中的Mongoose

_node中的Mongoose

一. __MongoDB

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

  • 所有的关系型数据库都需要通过SQL语言来操作
  • 所有的关系型数据库在操作之前都需要设计表结构
  • 而且数据表还要支持约束(唯一,逐渐,默认值,非空)
  • 非关系型数据库非常灵活
  • 有的非关系数据库就是key-value对

2. MongoDB数据库

  • 长得最像关系型数据库的非关系型数据库
  • 不需要设计表结构

基本概念:

  • 可以有多个数据库
  • 一个数据库中可以有多个集合(表)
  • 一个集合中可以有多个文档(表记录)
  • 文档结构很灵活,没有任何限制
  • MongoDB非常灵活,不需要像MySQL一样先创建数据库,鸟,设计结构(当你需要插入数据的时候只需要指定往那个数据库的那个集合操作就可以,一切都有MongoDB来帮你自动完成建库建表)
{
    qq:{
      users:[
          {数据},
          {数据},
          {数据},
          ...
      ],
      products:[
      ],
      ...
    },
    taobao:{
    },
    baidu:{
    },
    ...
}
2.1安装
mongod --vesiws
# 检测是否安装成功
2.2启动和关闭数据库

启动:

# mongodb 默认执行mongod 命令所处data/db作为自己的数据存储目录

mongod

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

mongod --dbpath=数据存储目录路径
2.3连接和退出数据库

连接:

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

退出

# 在连接状态下输入EXIT退出连接
exit
2.4基本指令
# 查看显示所有数据库
show dbs
show databases
# 查看当前操作的数据库
db
# 选择和创建数据库(不存在创建,存在选择)
# 存在在内存中,不会持久化到磁盘中(当数据库为空时)

use 数据库名称
# 命名规则:不能是空字符串,不能含(空格.$/\),全部为小写,最多64字节
 show collections
 db.students.insetrOne({})

二. 在express中使用(必须先开启服务器)

  • Schema: 相当于一个数据库的模板. Model可以通过mongoose.model 集成其基本属性内容. 当然也可以选择不继承.
  • Model: 基本文档数据的父类,通过集成Schema定义的基本方法和属性得到相关的内容.
  • instance: 这就是实实在在的数据了. 通过 new Model()初始化得到.

基本类型

  • String
  • Number
  • Date
  • Buffer
  • Boolean
  • Mixed
  • ObjectId
  • Array

mongoose

1.安装插件

npm i -S mongoose

2.使用

//导入mongoose模块
var mongoose = require('mongoose')

//数据库模板
var Schema = mongoose.Schema

//连接数据库
mongoose.connect('mongodb://localhost/itcast')

//建立studentSchema表结构
var studentSchema = new Schema({
    name:{
        type:String,
        required:true
    },
    gender:{
        type:Number,
        enum:[0,1],
        default:0
    },
    age: {
    	type: Number
  	},
    hobbies:{
        type:String
    }
})

//导出Student
module.exports = mongoose.model('Student', studentSchema)

3.基本指令

3.1 增加数据
//方法1
var admin = new User({
  username: 'uziisgod',
  password: '123456',
  email: 'uziisgod@qq.com'
})
admin.save(function (err, ret) {
  if (err) {
    console.log('失败');
  }
  else {
    console.log('成功');
    console.log(ret);
  }
})
//方法2
new User({
  username: 'uziisgod',
  password: '123456',
  email: 'uziisgod@qq.com'
}).save(function(err){
    if (err) {
    console.log('失败');
  }
  else {
    console.log('成功');
  }
})
3.2 查询数据
//整体查询(返回数组)
Student.find(function (err, ret) {
  if (err) {
    console.log('失败');
  }
  else {
    console.log('成功');
    console.log(ret);
  }
})
//条件查询(返回数组)
User.find({
  username: 'liuzhenxing'
}, function (err, ret) {
  if (err) {
    console.log('失败');
  }
  else {
    console.log('成功');
    console.log(ret);
  }
})
//只查找一个(返回对象)
//条件查询
User.findOne({
  username: 'liuzhenxing'
}, function (err, ret) {
  if (err) {
    console.log('失败');
  }
  else {
    console.log('成功');
    console.log(ret);
  }
})
//整体查询
User.findOne(function (err, ret) {
  if (err) {
    console.log('失败');
  }
  else {
    console.log('成功');
    console.log(ret);
  }
})
3.3 删除数据
//根据信息删除
User.remove({
  username: 'admin'
}, function (err) {
  if (err) {
    console.log('失败');
  } else {
    console.log('成功');
  }
})
//根据ID删除
User.findByIdAndRemove('60279e34f4fe6639704567c9', function (err) {
  if (err) {
    console.log('失败');
  }
})
3.4 更新数据
User.findByIdAndUpdate('60279c4c88e66332f460efd1', {
  password: 'rm513142'
}, function (err, ret) {
  if (err) {
    console.log('失败');
  } else {
    console.log('成功', ret);
  }
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值