MongoDB基础知识


  • Lv 1

    一、基础概念

    1、文档(document)是MongoDB中数据的基本单元,非常类似于关系型数据库管理系统中的 

    2、集合(collection)可以看做是一个拥有动态模式(dynamic schema)的 

    3、MongoDB的一个实例可以拥有多个相互独立的数据库,每一个数据库拥有自己的集合 

    4、每一个文档都有一个特殊的键"_id",这个键在文档所属的集合中是唯一的 

    5、MongoDB自带JavaScript shell,可用于管理MongoDB的实例或数据操作

    MongoDB概念database  数据库
    collectionrow  行/文档
    fieldindex  索引
    primary key   primary key  主键,MongoDB自动将_id字段设置为主键

    从上表中的区别,能够让我们更好的理解和记忆MongoDB的一些基础概念术语。

    二、shell 基础操作

    1、新增

    //创建新的数据库
    MongoDB Enterprise > use db_test
    switched to db db_test
    //新增集合并插入数据
    MongoDB Enterprise > db.col_test.insert({"no":"F1","name":"Jack"})
    WriteResult({ "nInserted" : 1 })
    

    注意insert()和save()方法使用的区别,上次在文章分享中有提到过,如果忘了,请看回之前的文章,

    当然还有很多关于insert的操作,如insertOne()、insertMany()等,具体的可以自己多加操作,在此就不逐个解释说明了。

    2、查询 

    我们使用find()和findOne()方法来查询数据库集合中的数据

    MongoDB Enterprise > db.col_test.find()
    { "_id" : ObjectId("5ae27fa6f8dee951b3c28b05"), "no" : "F1", "name" : "Jack" }
    { "_id" : ObjectId("5ae282c7f8dee951b3c28b06"), "no" : "F2", "name" : "Lily" }
    //findOne()只查询1个文档
    MongoDB Enterprise > db.col_test.findOne()
    {
        "_id" : ObjectId("5ae27fa6f8dee951b3c28b05"),
        "no" : "F1",
        "name" : "Jack"
    }
    

    find()查询的时候最多显示20个匹配的文档,然后会提示:“Type "it" for more”,输入“it”就会再显示出来,如此类推循环显示出来。

    { "_id" : ObjectId("5ae29d2b22077c36eb24d438"), "no" : "F40", "name" : "Mike18" }
    Type "it" for more
    MongoDB Enterprise > it
    { "_id" : ObjectId("5ae29d2b22077c36eb24d439"), "no" : "F11", "name" : "Mike19" }
    { "_id" : ObjectId("5ae29d2b22077c36eb24d43a"), "no" : "F31", "name" : "Mike20" }

    3、更新文档

    文档插入数据库以后,就可以使用update()方法来更新,update()接受至少两个参数:

    第一个是限定条件(用于匹配待更新的文档);第二个是新的文档,用于说明要对找到的文档进行哪些修改。

    更新操作是不可分割的:若是两个更新同时发生,先到达服务器的先执行,接着执行另一个。

    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 :可选,抛出异常的级别。

    举个例子,我们先在集合中插入1笔记录,然后通过 update() 方法来更新

    MongoDB Enterprise > db.col_test.findOne()
    {
        "_id" : ObjectId("5ae27fa6f8dee951b3c28b05"),
        "no" : "F1",
        "name" : "Jack"
    }
    MongoDB Enterprise > db.col_test.update({"name":"Jack"},{$set:{"name":"Mike"}});
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    MongoDB Enterprise > db.col_test.findOne()
    {
        "_id" : ObjectId("5ae27fa6f8dee951b3c28b05"),
        "no" : "F1",
        "name" : "Mike"
    }
    

    4、删除

    使用remove()可将文档从数据库中永久的删除,如果没有使用参数匹配,那么则会删除集合内的所有文档。它可以接受一个作为限定条件的文档作为参数。

    remove()不会删除集合本身,也不会删除集合的元信息

    //删除test集合中指定的文档
    MongoDB Enterprise > db.test.find()
    { "_id" : ObjectId("5ae2cf7322077c36eb24d44f"), "no" : "F01", "name" : "Jack" }
    { "_id" : ObjectId("5ae2cfb322077c36eb24d450"), "no" : "F02", "name" : "Lucy" }
    MongoDB Enterprise > db.test.remove({"no":"F01"})
    WriteResult({ "nRemoved" : 1 })
    MongoDB Enterprise > db.test.find()
    { "_id" : ObjectId("5ae2cfb322077c36eb24d450"), "no" : "F02", "name" : "Lucy" }
    //删除集合内的所有文档
    MongoDB Enterprise > db.test.find()
    { "_id" : ObjectId("5ae2cfb322077c36eb24d450"), "no" : "F02", "name" : "Lucy" }
    MongoDB Enterprise > db.test.remove({});
    WriteResult({ "nRemoved" : 1 })
    

    删除集合内所有的文档后,查看下数据已经没有,但是该集合还存在,

    若要删除集合,则使用drop函数,db.test.drop()把整个test集合给删掉,集合里的文档以及元数据都会删除,再用show tables查看时,不会再显示刚刚出现的集合

    MongoDB Enterprise > show tables
    col_test
    test
    MongoDB Enterprise > db.test.drop();
    true
    MongoDB Enterprise > show tables
    col_test

    三、数据类型

    null:用于表示空值或者不存在的字段   {"x":null}
    布尔型:布尔型有两个值true和false      {"x":true}
    数值:shell默认使用64位浮点型数值       {"x":3.14}   or   {"x":3}
                 对于整型值,可使用NumberInt类(表示4字节带符号整数)      {"x":NumberInt("3")}
                 NumberLong类(表示8字节带符号整数)   {"x":NumberLong("3")}
    字符串:UTF-8字符串都可以表示为字符串类型的数据           {"x":"foobar"}
    日期:日期被存储为自新世纪元以来经过的毫秒数,不存储时区   {"x":new Date}
    正则表达式:查询时,使用正则表达式作为限定条件              {"x":/foobar/i}
    数组:数据列表或数据集可以表示为数组         {"x":["a","b","c","d"]}
    内嵌文档:文档可嵌套其他文档           {"x":{"foo":"bar"}}
    对象id:对象id是一个12字节的ID,是文档的唯一标识

    四、总结

    MongoDB的基础知识我们还是要熟悉,在日常操作过程中可以避免出现一些不必要的报错,提高工作效率,越是基础的知识,越不能粗心大意,

    相信掌握了MongoDB的基础知识后,再深入了解MongoDB就不会有太大的问题。


登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待