node.js养成计划(五)nodejs使用mongodb

  • docker 安装mongoDb

      拉镜像
      docker pull mongo
      生成容器
      docker run --name mongo01 -p 27017:27017 -v /java/mongo/db:/data/db -d mongo --auth
      docker exec -it mongo /bin/bash
      创建一个名为 admin,密码为 123456 的用户。
      >  db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'}]});
      尝试使用上面创建的用户信息进行连接。
      > db.auth('admin', '123456')
    
  • 连接和退出

连接

mongo

退出

exit
  • 基本命令介绍
    • show dbs 查看所有数据库
    • db 查看当前数据库
    • use db 切换数据库
    • show collections 查询所有的表
    • 查询
      • db.cats.find() 查询cats表中所有的数据
    • 插入数据(建表)
      • db.students.insertOne({“name”:“jack”})
  • mongodb是什么
    • 数据库(database):是一个仓库,仓库中可以存放集合

    • 集合(collections):类似数组,在集合中可以存放文档

    • 文档(document):文档数据库的最小单位,我们存储和操作的内容全部是文档

  • 强大优势
    • 数据库不用存在、表不用存在都会在你创建第一条数据的时候自动创建

一、常见的操作包

官方:mongodb 比较原生(不推荐使用)
第三方:mongoose

1. mongoose初体验
  • 存储
var mongoose = require('mongoose');

// 连接 MongoDB 数据库
mongoose.connect('mongodb://localhost/test', { useMongoClient: true });

mongoose.Promise = global.Promise;

// 创建一个模型
// 就是在设计数据库
// MongoDB 是动态的,非常灵活,只需要在代码中设计你的数据库就可以了
// mongoose 这个包就可以让你的设计编写过程变的非常的简单
var Cat = mongoose.model('Cat', { name: String });

for (var i = 0; i < 100; i++) {
  // 实例化一个 Cat
  var kitty = new Cat({ name: '喵喵' + i });

  // 持久化保存 kitty 实例
  kitty.save(function (err) {
    if (err) {
      console.log(err);
    } else {
      console.log('meow');
    }
  });
}

2.使用细节
2.1 设计Scheme 发布Model
var mongoose = require('mongoose')

var Schema = mongoose.Schema   // 约束

// 1. 连接数据库:指定连接的数据库不需要存在,当你插入第一条数据之后就会自动被创建出来
mongoose.connect('mongodb://192.168.43.49/test',{useMongoClient:true})
mongoose.Promise = global.Promise;
// 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)

2.2 新增数据
var admin = new User({
  username: 'zs',
  password: '123456',
  email: 'admin@admin.com'
})

admin.save(function (err, ret) {
  if (err) {
    console.log('保存失败')
  } else {
    console.log('保存成功')
    console.log(ret)
  }
})
2.2 查询数据

查询所有

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)
  }
})
2.3 删除
User.remove({
  username: 'zs'
}, function (err, ret) {
  if (err) {
    console.log('删除失败')
  } else {
    console.log('删除成功')
    console.log(ret)
  }
})
2.4 更新
 User.findByIdAndUpdate('5a001b23d219eb00c8581184', {
   password: '123'
 }, function (err, ret) {
   if (err) {
     console.log('更新失败')
   } else {
     console.log('更新成功')
   }
 })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值