首页 > 代码库 > Mongodb基础与入门

Mongodb基础与入门


    1. 优点
            基于分布式文件存储的数据库。能为WEB应用提供可扩展的高性能数据存储解决方案。

    2. 将数据存储为一个文档,数据结构由键值对组成。文档类似于JSON对象。字段值可以包含其他文档,数组以及文档数组。

1. 可执行文件位于bin目录下      数据存储在data目录的db目录下【需手动创建】
2. /data/db 是默认启动的数据库路径( --dbpath )
3. 运行服务:执行mongo安装目录中的bin目录执行mongod命令来启动mongdb服务。
        若数据库目录非/data/db   可通过 --dbpath指定、
4. 进入后台: bin目录,然后执行mongo命令文件。默认连接到test文档(数据库)
                         cd /home/app/mongodb/bin/mongo
5. 启动HTTP用户界面,需指定参数--rest    $ ./mongod --dbpath=/data/db --rest
     Web界面访问端口比服务端口多1000
6.  基本概念:文档,集合,数据库
     数据库:database    数据表/集合:collection    数据记录行/文档:document
     数据字段/域:field     索引:index    主键:primary key  自动将_id字段设为主键
     不支持表链接
7. 一个mongodb可建立多个数据库。默认数据库为db(存储在data目录中),
    ???MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。



    1. 命令【转8】
            显示所有数据库列表:show dbs
            显示当前数据库集合或对象:db
            连接到指定数据库:use 数据库名
                    数据库可通过名字标识。数据库名可以是满足以下条件的任意UTF-8字符串。
                            (1)不能是空字符串( " " )
                            (2)不能含有空格,点(.),$,/,\和\0 (空字符)
                            (3)全部为小写
                            (4)最多为64字节
                    特殊数据库:
                            (1)admin
                                    权限上这是root数据库。若添加一个用户则此用户自动继承所有数据库的权限
                            (2)local
                                    永远不会被复制的数据库。可以用来存储限于本地单台服务器的任意集合
                            (3)config
                                    当Mongo用于分片设置时,在内部使用,用于保存分片的相关信息。
    2. 文档
            一组键值对(即BSON)。
            ???不需要设置相同的字段,且相同的字段不需要相同的数据类型。
            注意:
                    (1)键值对是有序的
                    (2)值不仅可以是字符串,还可以是其他几种数据类型
                    (3)区分类型和大小写
                    (4)不能有重复的键
                    (5)键一般为任意UTF-8字符串
            键命名规范:        
                    (1)不能含有空字符\0,???这个字符用来表示键的结尾。
                    (2).和$有特殊意义,只能在特定环境下使用
                    (3)???以下划线 "_" 开头的键是保留的
    3. 集合
            文档组,类似于表格。
            存储在数据库中,没有固定的结构。可插入不同格式和类型的数据,但通常插入集合的数据会有一定的关联性
            插入第一个文档时,集合就会被创建
            集合命名规范:
                    (1)不能是空字符串
                    (2)不能含有空字符\0,???这个字符用来表示集合名的结尾。
                    (3)不能以 "system."开头,这是为系统保留的前缀
                    (4)不能含有保留字符。访问系统创建的集合需要在名字里出现 $
    4. capped collections
            有很高的性能以及队列过期的特性(过期按照插入的顺序)
            是高性能自动的维护对象的插入顺序。适合类似记录日志功能
            需显示创建并指定一个collection的大小(包含了数据的头信息),单位为字节。collection的数据存储空间值提前分配
            注意:
                    可添加新的对象,但对象不会增加存储空间
                    可进行更新,如果新添的对象增加存储空间,更新失败
                    不允许进行删除。drop()删除collection所有的行【删除后须显示的重新创建这个collection】
                    在32bit机器中,最大存储为1e9( 1X109)个字节。
    5. 元数据
            数据库的信息是存储在集合中的。使用系统的命名空间:dbname.system.*
            dbname.system.* 是包含多种系统信息的特殊集合。例: dbname.system.namespaces        列出所有名字的空间
                                                                                                              dbname.system.indexes               列出所有索引
                                                                                                              dbname.system.profile                包含数据库概要(profile)信息
                                                                                                              dbname.system.uses                     列出所有可访问数据库的用户
                                                                                                              dbname.local.sources                   包含复制对端(slave)的服务器信息和状态
             注意:修改系统集合的对象限制
                     在{{system.indexes}}插入数据,可以创建索引。但除此之外该表信息是不可变的(特殊的drop index命令将自动更新相关信息)。
                     {{system.users}}是可修改的。 {{system.profile}}是可删除的。
    6.常用数据类型
            String:UTF-8 编码的字符串,存储数据常用的数据类型
            Integer:存储数值
            Boolean:存储布尔值
            Double:存储(双精度)浮点值
            Min/Max keys:将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
            Arrays:将数组或列表或多个值存储为一个键
            Timestamp:时间戳,记录文档修改或添加时间
            Object:用于内嵌文档
            Null:创建空值
            Symbol:采用特殊符号类型
            Date:使用UNIX时间格式存储当前日期或时间,可自己指定
            Object ID:创建文档的ID
            Binary Data:存储二进制数据
            Code:用于在文档中存储JavaScript代码
            Regular expression:存储正则表达式

    7. 连接[Mongodb Shell 连接]
            连接语法:
                    mongodb://[username:password@] host1 [:port1] [, host2 [:port2]] [/[database] [?options] ]
                    PS:
                            mongodb://    固定格式,必须指定
                            [username:password@]      如果设置,在连接数据库服务器之后,驱动都会尝试登陆这个数据库
                            host1      至少指定一个host[要连接的服务器的地址],如果连接复制集,请指定多个主机地址
                            portX      可选的指定端口,默认为27017
                            /database   如果指定username:password@,连接并验证登陆指定数据库。若不指定,默认打开admin数据库。  
                            ?options      如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开
                               例:
                                    replicaSet = name        
                                    slaveOk = true | false
                                    safe = true | false
                                    w = n
                                    wtimeoutMS = ms
                                    fsync = true | false
                                    journal = true | false
                                    connectTimeoutMS = ms
                                    socketTimeoutMS = ms
    8. 操作
            创建数据库语法格式:
                    use 数据库名        如果不存在则创建数据库,否则切换到指定数据库
            删除数据库语法格式:
                    db.dropDatabase()        删除当前数据库,默认为test  可使用 db 命令查看当前数据库名
            插入文档语法格式:[ 使用 insert() 或 save() 方法向集合中插入文档]
                    db.COLLECTION_NAME.insert(document)
                    db.col.save(document)       不指定_id字段,save() 类似于insert()  指定则会更新该_id的数据
            更新文档语法格式:[使用 update() 和 save() 方法来更新集合中的文档。update() 用于更新已存在的文档,save() 通过传入的文档来替换已有的文档]
                    db.collection.update{
                            <query>,
                            <update>,
                                {
                                    update:<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:抛出异常的级别。

                    db.collection.save{
                            <document>,
                            {
                                    writeConcern:<document>
                            }
                    
                    }
                    参数说明:
                            document:文档数据
                            writeConcern:抛出异常的级别
            删除文档语法格式:【在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯。】
                    db.collection.remove{
                            <query>,
                            <justOne>
                    }
                    2.6版本之后:
                    db.collection.remove{
                            <query>,
                            {
                                justOne:<boolean>,
                                writeConcern:<document>
                            }
                    }
                    参数说明:
                            query:删除的文档的条件。
                            justOne:如果设为 true 或 1,则只删除一个文档。
                            writeConcern:抛出异常的级别。
                    删除全部:
                            db.col.remove( { } )
                            db.col.find(  )
            查询文档语法格式:
                    db.collection.find(query,projection)
                    参数说明:
                             query:使用查询操作符指定查询条件
                             projection:使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)
                    易读方式读取数据:db.col.find().pretty()
                             pretty():以格式化的方式显示所有文档

Mongodb基础与入门