• 【MongoDb入门】15分钟让你敢说自己会用MongoDB了


    一.MongDB是什么呢,我该如何下手呢?

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

    如果小伙伴你的机器上还没有安装MongoDb的话请快快去安装吧,下载地址:https://www.mongodb.com/download-center#community,如果下载慢的话,我也是没有办法了呢。

    我使用的可视化界面是Robo,<>https://robomongo.org/download,这个下载还是比较快的,安装也是非常简单,直接next一路到底,最后设置一个连接配置。

    如果你已经安装成功了,请快快和我学习MongDB的命令吧。

    二.正文

    大家不要认为MongoDb和平时的数据库不同,其关系如下表

    SQL术语MongoDB解释
    database database 数据库
    table collection 数据库表/集合
    row document 数据记录行/文档
    column field 数据字段/域

    对数据的操作如下

    show collections #查看数据库中的表
    show dbs #查看该服务器上所有的数据库
    show users      #查询
    se admin        #切换数据库   
    db.help();                 #显示数据库操作命令,里面有很多的命令 
    db.foo.help();  当前数据库的帮助
    db.foo.find();  #not where
    db.foo.find({a:1})  #条件是数据中有一个属性叫a,且a的值为1

    实际上这个foo,代表你当前的数据库。

    创建数据库操作如下

    use demo; #创建数据库
    db; #切换当前数据库
    show dbs #检查数据库
    db.test.insert({"_id":"520","name","xiaoming"}) #创建表+数据
    db.dropDatabase() #删除数据库

    为什么你在这里可以不通过创建集合可以直接创建数据库呢,那是因为MongoDb的机制是,让你创建文档的时候,如果你没有集合,那就直接给你创建集合了。

    创建集合操作如下

    db.creatCollection("ccname") #ccname同dbname一样为自己剪的集合
    db.creatCollection("ccname",{capped:true,autoIndexID:true,size:10000,max:10000})

     其参数表如下:

    字段类型描述
    capped 布尔 固定集合的大小,如果值为true时必须也指定size
    autoindexid 布尔 如果为true,自动创建_id字段索引
    size 数值 设置集合的大小
    max 数值 指定固定集合中包含文档的最大数量

    删除集合:

    db.ccname.drop()

    其中通过createCollection创建表返回{"ok":1.0}表示成功,删除为true则成功;

    文档的ADD:

    db.zaraList.insert({'name':'zara','age':18})
    db.zaraList.find()
    或者你可以定义一个变量
    abc = ({'name':'zara','age':18}) db.zaraList.insert(abc)

     结果:

    /* 1 */
    {
    "_id" : ObjectId("5bf8b297ac045dc7d0a20b2c"),
    "name" : "zara",
    "age" : 18.0
    }

    id自动给我们加密了,是不是非常的炫酷。

     文档的Delete:

    db.zaraList.remove({'name':'zara'})#删除所有name=李华的文档
    db.zaraList.remove({'name':'zara'},{justOne:1})#删除一条name=李华的文档

    聪明的小伙伴,现在绝对想到了,刚才我们插入的id是个加密的了,那我们怎么删除它呢?

     db.zaraList.remove({"_id":ObjectId("5bf8b297ac045dc7d0a20b2c")})

     一些方法:

    db.collection.remove() 删除单个文档或与指定过滤器匹配的所有文档。
    db.collection.deleteOne()

    即使多个文档可能与指定的过滤器匹配,也最多删除与指定过滤器匹配的单个文档。3.2新版功能。

    db.collection.deleteMany()

    删除所有匹配指定过滤条件的文档。3.2新版功能。

     需要注意的是remove() 方法已经过时了,现在官方推荐使用 deleteOne() 和 deleteMany() 方法。

    如删除集合下全部文档:

    db.inventory.deleteMany({})
    

    删除 status 等于 A 的全部文档:

    db.inventory.deleteMany({ status : "A" })

    删除 status 等于 D 的一个文档:

    db.inventory.deleteOne( { status: "D" } )

    为什么不推荐呢,好像是因为一个释放的东西,每次remove的时候都需要 db.repairDatabase() 来回收磁盘空间。

    >db.repairDatabase()
    或者
    > db.runCommand({ repairDatabase: 1 })

    文档的Update:

    db.collection.update(
       <query>,
       <update>,
       {
         upsert: <boolean>,
         multi: <boolean>,
         writeConcern: <document>
       }
    )
    

     参数说明:

    • query : update的查询条件,类似sql update查询内where后面的。
    • update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
    • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
    • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
    • writeConcern :可选,抛出异常的级别。

     我们在ZaraList中先多插个数据(实际上偷偷的插了几条):

    接着我们通过update去更新下这个title吧。

    db.zara.update({'title':'zara说MongoDb'},{$set:{'title':'该吃了呢'}})
    

      

    为什么只更新第一个符合的呢,这个时候multi 就派上用场了;则需要设置 multi 参数为 true。

    >db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})

    如果你没用可视化窗口,那可能查出来的数据是一行一行的,你可以通过格式化进行整合美观点。

    db.zara.find().pretty()
    

    文档的Select

    语法:db.collection.find(query, projection)

    参数解析:

    • query :可选,使用查询操作符指定查询条件
    • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

    and写法:

    db.col.find({key1:value1, key2:value2}).pretty()
    

    Or写法:

    db.col.find(
       {
          $or: [
             {key1: value1}, {key2:value2}
          ]
       }
    ).pretty()

     and 和 or 联合使用

    db.col.find({"likes": {$gt:50}, $or: [{"by": "zara"},{"title": "MongoDB"}]}).pretty()

    三.写到最后(不是大牛就不可以写博客了吗?)

    你不是大牛就更应该写博客,无论你是开发还是运维测试,都是搞技术的,技术发展的很快,难道学完就丢了,过明天在拾起来?你不像那些大牛看看官方文档在自己动动手就可以懂原理的人,你就更没有理由不写博客了。

  • 相关阅读:
    密码学中矩阵相关计算
    系统调用
    用户空间栈&系统空间栈
    drupal重置管理员密码
    中断&异常
    再谈文件描述符
    linux下libpcap抓包分析
    模拟LRU算法&通道处理算法
    [转载] Mysql常用命令行大全
    [转载] php java交互 php/java bridge
  • 原文地址:https://www.cnblogs.com/ZaraNet/p/10011570.html
Copyright © 2020-2023  润新知