zoukankan      html  css  js  c++  java
  • 详细图解mongodb下载、安装、配置与使用

    一:下载、安装、配置、使用


    为了方便下载,我把当时下载的这个解压包,放在百度的云盘上。
    1、百度链接:https://pan.baidu.com/s/1xhFsENTVvU-tnjK9ODJ7Ag 密码:ctyy
    2、官方安装下载链接:https://www.mongodb.com/download-center?jmp=nav#community

    op image.png

    点击DOWNLOAD按钮,开始下载
    不过值得注意的是,上次测试了最新版本,在官网下载安装之后没有mongo.exe和mongod.exe

    因此我又卸载了官网版本,使用解压包重新安装,解压包版本如下:

    op image.png

    有兴趣的话还是可以从官网下载,然后观察下差异
    安装过程一路Click Next然后 Click Install 等安装完成即可,下图安装路径,建议自定义一下,别安装在系统盘

    op image.png

    op image.png

    op image.png

    安装完成

    二:配置使用

    1. 创建几个文件夹具体如下:数据库路径(data目录)、日志路径(logs目录)和日志文件(logs/mongo.log文件)
    2. 创建配置文件mongo.conf,文件内容如下:

    op image.png

    1. 启动MongoDB服务
      mongod –config “D:Mongomongo.conf”
      这个是使用自己刚刚在上面配置的配置文件来启动服务的。注意修改成自己的目录位置

    op image.png

    1. 创建并启动MongoDB服务
      如果每次都如上操作,岂不是相当麻烦,按照如下命令来创建并启动MongoDB服务,就可以通过windows服务来管理MongoDB的启动和关闭了
      mongod –config “D:Mongomongo.conf” –install –serviceName “MongoDB”
      net start MongoDB
      执行完之后,就可以去服务里看是否有成功创建了

    op image.png

    然后浏览器中输入http://127.0.0.1:27017,看到如下界面即说明启动成功

    op image.png

    1. 接下来使用Robomongo客户端管理工具就可以连接,后因收购被改名为Robo 3T

    op image.png

    Nice,连接成功,如下图

    op image.png

    MongoDB会默认创建admin和local库,不过刚才安装的Mongodb并不需要权限验证,如果数据安全性不需要很高,则可以安装不需要验证的db库,通过设置服务器之间的白名单做到访问安全

    三:安装Authorization校验的MongoDB
    需要注意的是:如果之前安装MongoDB时不需要 Auth,那么必须卸载MongoDB服务,进行重新安装,设置账号权限才生效!
    首先卸载之前的mongodb服务,接着删除data文件夹下所有东西,再清空log
    然后再次注册个服务的话,命令多添加个 –auth
    mongod –config “D:Mongomongo.conf” –auth –install –serviceName “MongoDB”
    net start MongoDB
    此时就可以用Robomongo工具进行连接试一下

    mongod.exe --remove --serviceName "MongoDB"
    mongod --config "D:Mongomongo.conf"  --auth --install --serviceName "MongoDB"
    net start MongoDB
    use admin
    db.createUser({user: "admin",pwd: "password",roles: [ { role: "root", db: "admin" } ]});
    exit

    e.g. 新建数据库

    mongo --port 27017 -u admin -p password --authenticationDatabase admin
    创建数据库lxkdb,当在这个数据库写入数据的时候,这个数据库就出现了
    use minily
    创建普通账户
    db.createUser({user: "minily",pwd: "password",roles: [{ role: "readWrite", db: "minily" }]});
    选择刚刚创建的数据库
    use minily
    然后进行数据库权限的认证,返回1就是认证OK,0就是认证失败。这个也是重点,在操作数据库之前要有那么一次的权限认证
    db.auth('minily','password')

    新建Collection,并添加一条数据

    db.student.save({name: 'zhangsan', age: 25, sex: true});
    在数据库minily中,插入一条数据,这个表叫student
    show collections
    显示当前数据库有的集合,也就是表
    db.student.find()
    查student表全部

    ·以上操作在Robomongo工具上来实现,简直不要太爽
    ·索引等进阶知识可以看官网 db.collection.createIndex()

    roles 用户角色:

    1. 数据库用户角色:read、readWrite;
    2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
    3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
    4. 备份恢复角色:backup、restore;
    5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
    6. 超级用户角色:root

    快速启动和停止服务的快捷键
    a. net start serviceName

    b. net stop serviceName

    最后,每次要在命令行使用mongo命令,都得进入到对应的bin目录下,这样很是麻烦,配置个系统环境变量,方便直接使用

    op image.png

    这样就可以直接在cmd命令行,不需要进行目录切换,就可以直接使用 mongo.exe 命令

    op image.png

    —————————常用命令以及T-SQL增删改查语句————————————–


    查看表基本信息:db.getCollection(‘AUDCAD’).stats() 类似于MySql的EXPLAIN

    op image.png
    倒序查询数据:db.getCollection(‘AUDCAD’).find({}).sort({field:-1})

    op image.png
    show dbs; #查看全部数据库
    show collections; #显示当前数据库中的集合(类似关系数据库中的表)
    show users; #查看当前数据库的用户信息
    use <db name="">; #切换数据库跟mysql一样
    db;或者db.getName(); #查看当前所在数据库
    db.help(); #显示数据库操作命令,里面有很多的命令
    db.foo.help(); #显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令
    db.foo.find(); #对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据)
    db.foo.find( { a : 1 } ); #对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1
    db.version(); #当前db版本
    db.getMongo(); #查看当前db的连接机器地址
    db.dropDatabase(); #删除数据库
    op image.png
    增(insert)
    1.单条数据插入
    db.user.insert({“name”:”jack”,”age”:20})
    2.批量数据插入采用命令行for循环
    删(remove)
    1.不带参数会删除全部数据,且不可恢复,切记!
    db.user.remove({“name”:”joe”})
    改(update)
    1.整体更新
    var model = db.user.findOne({“name”:”jack”})
    model.age=30
    db.user.update({“name”:”jack”},model)
    2.局部更新
    ● $inc修改器——比如我们做一个在线用户状态记录,每次修改会在原有的基础上自增$inc指定的值,如果“文档”中没有此key,则会创建key
    db.user.update({“name”:”jack”},{$inc:{“age”:30}}) //年龄增加30
    ● $set修改器
    db.user.update({“name”:”jack”},{$set:{“age”:10}}) //年龄变为10</db>

    3.upsert操作 —— 如果没有查到,就在数据库里面新增一条,使用起来很简单,将update的第三个参数设为true即可。
    4.批量更新 —— 在mongodb中如果匹配多条,默认的情况下只更新第一条,那么如果我们有需求必须批量更新,那么在mongodb中实现也是很简单的,在update的第四个参数中设为true即可
    查(find)
    1.查找key=value的数据
    db.collection.find({ “key” : value })
    2.key > value
    db.collection.find({ “key” : { $gt: value } })
    3.key < value
    db.collection.find({ “key” : { $lt: value } })
    4.key >= value
    db.collection.find({ “key” : { $gte: value } })
    5.key <= value
    db.collection.find({ “key” : { $lte: value } })
    6.value1 < key <value2 db.collection.find({="" "key"="" :="" {="" $gt:="" value1="" ,="" $lt:="" value2="" }="" })="" 7.key="" <=""> value
    db.collection.find({ “key” : { $ne: value } })
    8.取模运算,条件相当于key % 10 == 1 即key除以10余数为1的
    db.collection.find({ “key” : { $mod : [ 10 , 1 ] } })
    9.不属于,条件相当于key的值不属于[ 1, 2, 3 ]中任何一个
    db.collection.find({ “key” : { $nin: [ 1, 2, 3 ] } })
    10.属于,条件相当于key等于[ 1, 2, 3 ]中任何一个
    db.collection.find({ “key” : { $in: [ 1, 2, 3 ] } })
    11.$size 数量、尺寸,条件相当于key的值的数量是1(key必须是数组,一个值的情况不能算是数量为1的数组)
    db.collection.find({ “key” : { $size: 1 } })
    12.$exists 字段存在,true返回存在字段key的数据,false返回不存在字度key的数据
    db.collection.find({ “key” : { $exists : true|false } })
    13.正则,类似like;“i”忽略大小写,“m”支持多行.如joe会匹配出来
    db.collection.find({ “name”:/^j/,”name”:/e$/ })
    14.$or或 (注意:MongoDB 1.5.3后版本可用),符合条件a=1的或者符合条件b=2的数据都会查询出来
    db.collection.find({ $or : [{a : 1}, {b : 2} ] })
    15.符合条件key=value ,同时符合其他两个条件中任意一个的数据
    db.collection.find({ “key”: value , $or : [{ a : 1 } , { b : 2 }] })
    16.内嵌对象中的值匹配,注意:”key.subkey”必须加引号
    db.collection.find({ “key.subkey” :value })
    17.这是一个与其他查询条件组合使用的操作符,不会单独使用。上述查询条件得到的结果集加上$not之后就能获得相反的集合。
    db.collection.find({ “key”: { $not : /^val.val$/i } })
    18.$where中的value,就是我们非常熟悉,非常热爱的js
    db.collection.find({ $where:function(){return this.name==”joe”} })</value2>

    • 指定时间删除
      db.getCollection(‘AUDCHF’).remove({“ctm”:{$lt:1534322144}})
    • 设置过期时间(索引)
      db.collection.createIndex({“createdTime”: 1},{expireAfterSeconds: 300})
      其中,dollection表名,expireTime是索引所在的字段,为Date格式,expireAfterSeconds表示0秒之后过期。该方式,可以传入一个过期时间到数据库中,到了指定时间,数据即删除

    —————————简介以及优缺点————————————–


    mongodb是一个介于nosql数据库和mysql数据库之间的一个数据存储系统,它没有严格的数据格式,但同时支持复杂查询,而且自带sharding模式和Replica Set模式,支持分片模式,复制模式,自动故障处理,自动故障转移,自动扩容,全内容索引,动态查询等功能。扩展性和功能都比较强大。
    据称,写入百万级的数据,MongoDB基本上十分钟以下可以解决。
    虽然MongoDB是以数据库的身份存在,但也常有人将它与Redis、Memcache比较,可见Mongo的价值所在。

    缺点
    l 不支持事务操作
    l 空间预分配,占用过大
    l MongoDB没有如MySQL那样成熟的维护工具
    l 无法进行关联表外键,不适用于关系多的数据
    l 复杂聚合操作通过mapreduce创建,速度慢
    | 模式自由, 自由灵活的文件存储格式带来的数据错误
    | 删除数据集合后空间不会自动释放,只有用db.repairDatabase()去修复才能释放 - 慎用!

    优点
    l 文档结构的存储方式,能够更便捷的获取数据
    l 内置GridFS,支持大容量的存储
    l 内置Sharding,分片简单
    l 海量数据下,性能优越
    l 支持自动故障恢复(复制集)

    MongoDB不可用于较复杂的业务逻辑,不擅长较频繁的请求,特别是涉及到多线程;多用于不频繁请求使用,交互逻辑少的设计中

  • 相关阅读:
    linux 相关( 随时更新)
    django admin 修改批量操作内容
    区块链
    关于读取excel 和 写excel
    git基本用法
    服务器与本地的控制工具unison
    爬虫框架 Scrapy
    爬虫高性能 asyncio库 twisted库 tornado库
    爬虫请求库之selenium模块
    爬虫请求库
  • 原文地址:https://www.cnblogs.com/minily/p/9431609.html
Copyright © 2011-2022 走看看