MongoDB技术之旅-MongoDB基本操作

MongoDB的基本操作

MongoDB shell

MongoDB安装完成后,会自带客户端工具mongo

mongo --help
Options:
  --shell                               run the shell after executing files
  --nodb                                don't connect to mongod on startup - 
                                        no'db address' arg expected
  --norc                                will not run the ".mongorc.js" file 
                                        on start up
  --quiet                               be less chatty
  --port arg                            port to connect to
  --host arg                            server to connect to
  --eval arg                            evaluate javascript
  -h [ --help ]                         show this usage information
  --version                             show version information
  --verbose                             increase verbosity
  --ipv6                                enable IPv6 support (disabled by 
                                        default)

Authentication Options:
  -u [ --username ] arg                 username for authentication
  -p [ --password ] arg                 password for authentication
  --authenticationDatabase arg          user source (defaults to dbname)
  --authenticationMechanism arg (=MONGODB-CR)
                                        authentication mechanism
  --gssapiServiceName arg (=mongodb)    Service name to use when
                                        authenticating using GSSAPI/Kerberos
  --gssapiHostName arg                  Remote host name to use for purpose 
                                        of GSSAPI/Kerberos authentication

mongo shell是功能完备的JavaScript解释器,可以运行任何的IavaScript程序。同时它是一个独立的MongoDB客户端,有许多语法扩展用来方便于SQL shell用户的一些习惯。

CRUD操作

CRUD操作,也就是通常意义上的Crete,read,update,delete操作。

  • 创建集合

    >db.createCollection('zyshun')
    { "ok" : 1 }
    >show collections;
    system.indexes
    system.profile
    zyshun
    
  • 插入文档

    > value={"name":"zyshun","age":27}
    { "name" : "zyshun", "age" : 27 }
    > db.zyshun.insert(value)
    WriteResult({ "nInserted" : 1 })
    > db.zyshun.find()
    { "_id" : ObjectId("5600c3046ec963302259bcee"), "name" : "zyshun", "age" : 27 }
    
  • 读取数据

    > db.zyshun.findOne()
    {
    "_id" : ObjectId("5600c3046ec963302259bcee"),
    "name" : "zyshun",
    "age" : 27
    }
    > db.zyshun.find()
    { "_id" : ObjectId("5600c3046ec963302259bcee"), "name" : "zyshun", "age" : 27 }
    
  • 更新数据

    > value.sexs='1'
    1
    > db.zyshun.update({"name":"zyshun"},value)
    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > db.zyshun.find()
    { "_id" : ObjectId("5600c3046ec963302259bcee"), "name" : "zyshun", "age" : 27, "sexs" : "1" }
    
  • 删除数据

    > db.zyshun.remove({"name":"zyshun"})
    WriteResult({ "nRemoved" : 1 })
    > db.zyshun.find()  
    >
    

MongoDB的一些帮助

> help
db.help()                    help on db methods
db.mycoll.help()             help on collection methods
sh.help()                    sharding helpers
rs.help()                    replica set helpers
help admin                   administrative help
help connect                 connecting to a db help
help keys                    key shortcuts
help misc                    misc things to know
help mr                      mapreduce

show dbs                     show database names
show collections             show collections in current database
show users                   show users in current database
show profile                 show most recent system.profile entries 
                             with time >= 1ms
show logs                    show the accessible logger names
show log [name]              prints out the last segment of log in 
                             memory, 'global' is default
use                 set current database
db.foo.find()                list objects in collection foo
db.foo.find( { a : 1 } )     list objects in foo where a == 1
it                           result of the last line evaluated; use 
                             to further iterate
DBQuery.shellBatchSize = x   set default number of items to display 
                             on shell
exit                         quit the mongo shell

MongoDB的数据类型

MongoDB的基本数据类型:MongoDB的文档类似于传统的JSON,而传统的JSON仅包含6种数据类型,null、布尔、数字、字符串、数组、对象。MongoDB在保留了JSON基本的键值对特性的基础上,添加了一些其他的数据类型,32位整数,64位整数,64位浮点数,字符串,符号,对象ID,日期,正则表达式,代码块、二进制数据、最大最小值、数组、内嵌文档。
下面说下这些数据类型中比较特殊的几个:

数字

MongoDB中有三种数字类型的数据,在默认的情况下,shell中的数字都被MongoDB当做双精度数。你在shell中获取32位整数,处理后返回数据库后,这个整数就被转换为浮点数,即使这个整数没有任何的变化。但是有些63位整数并不能精确的表示64位浮点数,所以在shell中查看存入的63位整数,它会显示一个内嵌文档,表示可能不准确。要是插入的64位整数不能精确地作为双精度数显示,shell会添加两个键“top”,“bottom”,分别表示高32位和低32位。

日期

MongoDB的日期类型来源于JavaScript本身的特性,通过调用构造函数返回对日期的字符串表示

数组

数组是一组值,既可以作为有序对象(列表,栈、队列)来操作,也可以作为无序对象(集合)操作。数组可以包含不同数据类型的元素。

内嵌文档

所谓的内嵌文档就是把一个文档作为另一个文档的某个键的值,这样数据可以组织的更加自然,不用存成传统关系型中的扁平结构。

_id和ObjectId

MongoDB中的存储的文档必须有一个_id键,这个键值可以是任何类型的值,默认是ObjectId对象,在一个集合里_id是唯一值,确保集合里每个文档都能被唯一标识。

MongoDB 文档的插入、更新及删除

文档的插入

insert是向文档中插入数据的基本方法

> db.zyshun.insert({"name":"zyshun"})
WriteResult({ "nInserted" : 1 })
> db.zyshun.find()
{ "_id" : ObjectId("560220a2f303d2986f20ad42"), "name" : "zyshun" }

批量插入,就是在一个TCP请求中完成数百乃至数千的文档插入工作,减少零散请求带来的网络开销。可以通过程序控制来完成批量擦做。插入的过程就是驱动程序会将数据转换为BSON的形式,然后将其送入数据库,数据库解析BSON,检验是否包含_id键并且文档的大小是否超过限制,除此不做任何的数据验证,文档原样存入数据库。数据不检验的坏处就是会存入无效数据,而好处可以让数据库更加安全,远离注入式攻击。

删除文档

remove是对文档中的数据进行删除操作,remove会删除文档中的数据,但是不回删除集合本身,索引也会保留下来。删除操作是永久性的,不能撤销也不能恢复。要是删除不需要的集合,db.collection.drop()更快速一些。

更新文档

update方法可以用来修改已有的文档数据,update方法有两个参数,一个用来查询文档定位数据,另一个用来修改文档数据。更新操作是原子的,如果两个更新同时发生,先到达的先执行。
更新操作有一些修改器,举例说明。

  • $set

    用来指定一个键的值,如果键不存在就创建它,如果存在则更新。对应的可以使用$unset修改器进行删除键。

  • $inc

    $inc修改器,用来增加已有键的值,或者在键不存在的时候创建一个。对于分析数据、因果关系、投票或者值需要变化的地方非常方便。

  • $push

    指定的键存在会向已有数组的末尾加入一个元素,要是指定的键不存在就会创建一个新的数组

upsert

是一种特殊的更新,要是没有文档符合更新条件,就会以这个条件和更新文档为基础创建一个新的文档。如果找到匹配的文档则正常更新。

默认情况下,更新只能对符合条件的第一个文档进行操作,要是有多个文档符合条件,其余的文档不会改变,可以通过设置update的第四个参数为true,来使得所有匹配的文档都被更新。

你可能感兴趣的:(MongoDB技术之旅)