Fork me on GitHub

Mongo DB 数据库 使用的心得

1、什么是Mongo DB?

  MongoDB 是一个基于分布式文件存储的数据库,由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

  MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的,在高负载的情况下,添加更多的节点,可以保证服务器性能。

  MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。

  MongoDB 文档类似于 JSON 对象,字段值可以包含其他文档,数组及文档数组。

2、命令行操作Mongo db

  2.1 准备工作

  官网下载解压mongodb文件

  D盘根目录下创建一个文件夹data,在data内部再创建一个文件夹db

  进入到mongodb的bin目录,按住shift,点击鼠标的右键,打开命令行窗口,输入如下指令打开数据库连接池

    mongod --dbpath d:\data\db

  再在此目录中,按住shift,点击鼠标的右键,打开命令行窗口,输入如下指令打开一个连接数据库的客户端,不要关闭上一个窗口

    mongo

  如果这样不成功,说明是管理员权限的问题,那就需要多走几步路

  以管理员身份运行命令行窗口打开数据库连接池

    d:
    cd mongodb    (注意你自己的文件夹的名称)
    cd mongodb-win32-x86_64-2008plus-ssl-4.0.9
    cd bin
    mongod --dbpath d:\data\db    

  以管理员身份运行命令行窗口打开客户端

    d:
    cd mongodb    (注意你自己的文件夹的名称)
    cd mongodb-win32-x86_64-2008plus-ssl-4.0.9
    cd bin
    mongo

  2.2 数据库常用命令

   2.2.1 help查看命令提示

    help 
    db.help() 
    db.test.help()
    db.test.find().help()

  2.2.2 创建切换数据库--------无则创建并且切换,有则切换

 

    db                    // test 
    use hupeng       // switched to db hupeng  
    db                    // hupeng   

 

  2.3.3 查询数据库

  show dbs

 2.3 collection 聚集集合操作

  2.3.1 创建一个聚集集合

    db.createCollection(name, options) 
    db.createCollection("collName", {size: 20, capped: true, max: 100});

  参数说明:

  • name: 要创建的集合名称

  • options: 可选参数, 指定有关内存大小及索引的选项xsa

字段类型描述
capped 布尔(可选) 如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数。
autoIndexId 布尔(可选) 如为 true,自动在 _id 字段创建索引。默认为 false。
size 数值(可选) 为固定集合指定一个最大值(以字节计)。如果 capped 为 true,也需要指定该字段。
max 数值(可选) 指定固定集合中包含文档的最大数量。

  2.3.2 得到指定名称的聚集集合

    > db.getCollection('users') 
    hupeng.users

3 数据的增删改查

 3.1  增

  db.collection.insertOne(document) // 向指定集合中插入一条文档数据
  db.collection.insertMany(document) // 向指定集合中插入多条文档数据  
  > db.users.insertMany([{
   username: '张三',
   password: '123',
   age: 20,
   sex: '男' },{
   username: '李四',
   password: '456',
   age: 16,
   tel: '15738353168',
   sex: '女'
  }])

  3.2  删

> db.users.deleteOne({password: '123'}) //删除一条,password为123的数据
{ "acknowledged" : true, "deletedCount" : 1 }
> db.users.find().pretty() //查询数据库的数据
> db.users.deleteMany({}) //删除多条
{ "acknowledged" : true, "deletedCount" : 2 }
> db.users.find().pretty()

  3.3  改

  db.col.updateOne({key: value}, {$set: {key: value}}) //修改第一条key为value的数据
  db.col.updateMany({key: value}, {$set: {key: value}}) //修改多条key为value的数据
   db.col.updateOne({key: value}, { $inc: {key: num}})   //修改某一条数据的某一个字段key的自增自减num(num为正->加,num为负->减)

    3.4  查

> db.users.find().pretty() // 查询所有的数据,显示所有的字段
> db.users.find({},{_id: 0}).pretty() // 不显示_id字段
>db.users.find({},{_id: 0, username: 1, age: 1}).pretty() // 不显示_id字段,显示username字段'和age字段,0为不显示,1为显示
>db.users.find({username: '李四'},{_id: 0}).pretty() //显示username为张三的数据
>db.users.find({age: { $gte: 18, $lte: 20}}, {_id:0}).pretty()
// 大于:$gt 大于等于:$gte 小于:$lt 小于等于:$lte
>db.users.find({}, {_id: 0}).sort({age: 1}).pretty()//按照年龄排序 .sort({key:num}) num为1表示按照key值升序,为-1表示降序
模糊查询:
>db.users.find({username:'四'}, {_id:0}).pretty() // 精确查询,没有数据 没有username为 “四” 的
>db.users.find({username: /四/}, {_id:0}).pretty()//找username中含有 “四” 的数据
>db.users.find({ $or: [{username: /三/}, {username: /四/}]}, {_id:0}).pretty()//查询名字中含有三或者 含有四的 * $or
>  .distinct('city')   //查询所以数据的city字段组成数组,并且去重
>  .count()   //查询的条数
>  .toArray() //转换成数组
>  .limit(num) //只能查询num条数据
>  .skip(n)   //从第n条开始查,下标从0开始

4 封装数据库模块

const sql = {
  // 数据库集合靠函数去传递
  insert (CollectionName, insertData) {                                     //插入
    // 数据库的操作属于异步操作,后续的业务逻辑会交给执行的那个单位
    // A 调用了B B包含异步操作,操作完毕 A继续执行业务逻辑
    // 异步操作  --- 回调函数 / promise / generator + yeild / async + await
    // User.insertMany(insertData, (err) => {
    //   if (err) throw err;
    //   console.log('插入成功')
    // })
    // promise的写法
    // return new Promise((resolve, reject) => {
    // })
    return new Promise((resolve, reject) => {
      CollectionName.insertMany(insertData, (err) => {
        if (err) throw err;
        resolve()
      })
    })
  },
  delete (CollectionName, deleteData, deleteType) {                        //删除
    // User.deleteOne(deleteData, (err) => {})
    // User.deleteMany(deleteData, (err) => {})
    // style.display = "none"   <===>  style['display'] = "none"
    // style.animation = "test" 兼容性 
    // 对象后的属性不可以是变量,如果有变量,写成 对象[属性] 形式
    deleteType = deleteType || 'deleteOne' // 默认为删除单条数据
    return new Promise((resolve, reject) => {
      CollectionName[deleteType](deleteData, (err) => {
        if (err) throw err;
        resolve()
      })
    })
  },
  update (CollectionName, whereObj, updateObj, updateType) {               //修改
    updateType = updateType || 'updateOne'
    return new Promise((resolve, reject) => {
      CollectionName[updateType](whereObj, updateObj, (err) => {
        if (err) throw err;
        resolve()
      })
    })
  },
  find (CollectionName, whereObj, showObj) {                                //查询
    return new Promise((resolve, reject) => {
      CollectionName.find(whereObj, showObj).exec((err, data) => {
        if (err) throw err;
        resolve(data)
      })
    })
  }
}
module.exports = sql

 

posted @ 2019-10-19 11:13  一只小鹏吖  阅读(332)  评论(0编辑  收藏  举报