zoukankan      html  css  js  c++  java
  • MongoDB学习笔记—02 MongoDB入门

    Mongodb的基本概念

    文档:是MongoDB中数据的基本单元,类似于关系型数据库中的行。

    集合:多个文档组成一个集合,类似于关系型数据库中的表。

    数据库:MongoDB的当个实例可以容纳多个独立的数据库,每个数据库有自己的集合和权限。

    键:每个文档都有一个特殊的键”_id”,在所处的集合中是唯一的。

    • 文档

    多个键值对有序的放在一起便是文档,如:

    { "name":"wangdh","age":"22"}

    上面的文档包含两个键name和age,其值分别是wangdh和22.

    说明:

    1)文档的键值对是有序的,也就是说,下面的文档与上面的文档是两个不同的文档:

    {"age":"22","name":"wangdh"}

    2)文档的键是字符串。

    3)MongoDB不但区分类型,还区分大小写。即下面的两个文档是不同的:

    {"age":"22","Age":22}

    {"age":22," Age ":"22"}

    4)同一个文档不能有相同的键,如下面的文档是不合法的:

    {"age":"22","age":22}

    • 集合

    集合是一组文档,相当于关系型数据库的表。

    1)集合的无模式性

    无模式的意思是:一个集合中的文档可以各式各样,文档的键值对数、键值对顺序可以不一样。例如下面的文档可以存在于一个集合中:{"age":"22","Age":22}、{"name":"wangdh"}

    但通过情况下,为了方便使用,一个集合往往只存放模式一致的文档。

    2)子集合:通过“.”字符分开的按命名空间划分的子集合,如一个带有博客功能的应用可能包含两个集合:bolg.posts、blog.authors

    • 数据库

    多个文档组成集合,多个集合组成数据库。一个MongoDB实例可以承载对个数据库,每个数据库都有独立的权限控制。

    注意:数据库名最终会变成文件系统里的文件。

    1)内置数据库

    admin:从权限角度看,相当于root数据库,要是将一个用户添加到此数据库,这个用户自动继承所有数据库的权限。

    local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合。

    config:当Mongo用于分片设置时,该数据库保存分片的相关信息。

    2)命名空间

    将数据库的名字放在集合面前,得到的就是集合的完全限定名,成为命名空间。例如:在test数据库中有一个blog.posts集合,则该集合的命名空间就是:test.blog.posts.命名空间的长度不得超过121字节。

    • ”_id”键

    MongoDB中存储的文档必须有一个”_id”键,可以是任意类型,默认是ObjectId对象。在一个集合中,每个文档都有唯一的”_id”键,来确保其唯一性。

    1)ObjectId

    使用12字节的存储空间,每个字节两位十六进制数,是一个24位的字符串。前4个字节是时间戳,精确到秒,接下来3个字节是所在主机的唯一标示符(通过是主机名的散列值),接下来2个字节是产生该ObjectId的进程标示符(PID)、最后3个字节是一个自动增长的计数器。

    前9个字节保证了同一秒钟不同机器产生的ObjectId是唯一的,后3个字节确保相同进程同一秒产生的ObjectId是不一样的。

    MongoDB Shell

    MongoDB自带一个JavaScript shell,可以通过命令行与MongoDB实例交互。

    • 运行shell

    windows平台下,通过在命令行运行bin目录下的mongo.exe文件,即可启动shell;Linux下通过运行mongo文件启动shell。shell会在启动时自动连接MongoDB服务器,所以要确保在使用shell之前启动mongod。

    • MongoDB客户端

    shell是一个独立的 MongoDB客户端,开启时,shell会连到MongoDB服务器的test数据库,并把这个数据库连接赋值给全局变量db。可以通过use命令来转换数据库:use wangdh(如果该数据库不存在则会创建)。

    • shell中的基本操作

    一般数据库的基本操作都是:创建、读取、更新、删除(CRUD).

    1)创建 insert

    insert函数添加一个文档到集合中。例如:先通过局部变量t1存储要插入的文档,然后通过全局变量db.集合名.insert(t1)将文档t1插入到指定集合中(集合不存在时会自动创建)。

    >t1={"name":"wangdh","age":22}

    >db.user.insert(t1)

    2)读取 find

    find函数返回集合中的所有文档,findOne函数返回一个文档。

    例如:db.user.find()会将刚才插入的文档读取出来。

    两个函数都可以接受查询文档形式的行动条件,使用find时,shell自动显示最大20个匹配的文档

    3)更新 update

    update函数接受至少两个参数:第一个是要更新的限定条件,第二个是新的文档。如:

    >newName={"name":"newName"}

    >db.user.update({"name":"wangdh"}, newName)

    4)删除 remove

    remove函数从数据库中永久性的删除文档,在不适用参数指定限定的情况下,会删除一个集合内的所有文档,例如:db.user.remove()

    只是为了传播知识,侵犯到您的权益,请与1366678737@qq.com联系
  • 相关阅读:
    169. Majority Element求众数
    567. Permutation in String字符串的排列(效率待提高)
    51. N-Queens N皇后
    52. N-Queens II N皇后II
    layui的form.val无法动态渲染赋值表单问题解决方法
    layui 父页面获取弹窗传递的值 和 父页面传值给子弹窗的方法
    layui搜索框,监听为空,表格重新加载
    layui form表单 input输入框获取焦点后 阻止Enter回车自动提交
    5月17日 日期格式遇到一些问题
    Layui关闭弹出层并刷新父窗口
  • 原文地址:https://www.cnblogs.com/Jxwz/p/4154018.html
Copyright © 2011-2022 走看看