文章目录
  1. 1. MongoDB系列——入门篇
    1. 1.1. 安装(windows)
    2. 1.2. 启动与关闭
    3. 1.3. 基本操作(mongoDB 3.0.4)
      1. 1.3.1. 数据库
      2. 1.3.2. 用户
      3. 1.3.3. 集合
      4. 1.3.4. 索引
      5. 1.3.5. CURD

MongoDB系列——入门篇

安装(windows)

1.去MongoDB官网下载安装包,我们发现有32bit64bit32bit的mongodb最大只能存放2G的数据,64bit就没有限制。
2.安装好后,将mongodb的bin路径配置到环境变量PATH中

启动与关闭

1
2
3
$ mongod --dbpath=D:\mongodb\db  #dbpath为数据库文件存放的目录,默认模式,可以不需要用户名和密码
$ mongod --dbpath=D:\mongodb\db --auth # auth表示开启安全认证模式
$ db.shutdownServer() #关闭数据库 也可以使用kill -2 pid,不要使用kill -9 pid

你也可以通过访问 http://localhost:27017/ 来判断是否启动成功

基本操作(mongoDB 3.0.4)

数据库

1
2
3
4
5
6
7
8
9
$ use mydb #创建数据库,并且使用它,如果存在,使用这个数据库
$ show dbs #查询已有的数据库列表
$ show collections #显示当前数据库中的所有的集合,相当于关系数据库的表
$ db.dropDatabase() #删除当前数据库
$ db.cloneDatabase(“127.0.0.1”) #将指定机器上的数据库的数据克隆到当前数据库
$ db.copyDatabase("mydb", "temp", "127.0.0.1") #将本机的mydb的数据复制到temp数据库中
$ db.repairDatabase() #修复当前数据库
$ db.stats() # 获取数据库的状态
$ db.getMongo() # 查看当前db的链接机器地址

用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建管理用户
$ use admin
$ db.createUser(
{
user: "sa", # 用户名
pwd: "sa", # 密码
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] # 权限
}
)
# mongoDB数据库使用--auth方式启动后,开启客户端
$ mongo -u sa -p sa --authenticationDatabase admin #登录是否成功
$ db.auth("sa", "sa") #认证用户
$ show users #显示用户列表 或者 db.system.users.find()
$ db.dropUser('sa') #删除用户 或者 db.system.users.remove({user:"sa"})

Built-In Roles(内置角色):

  1. 数据库用户角色:read、readWrite;
  2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
  3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  4. 备份恢复角色:backup、restore;
  5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  6. 超级用户角色:root
    // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
  7. 内部角色:__system
    PS:关于每个角色所拥有的操作权限可以点击上面的内置角色链接查看详情。
    参照http://docs.mongodb.org/manual/reference/built-in-roles/#built-in-roles

集合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 第一个参数为集合的名称
# capped:是否启用集合限制,如果开启需要制定一个限制条件,默认为不启用,这个参数没有实际意义
# size:限制集合使用空间的大小,默认为没有限制,单位byte
# max:集合中最大条数限制,默认为没有限制,size的优先级比max要高
# autoIndexId:是否使用_id作为索引,默认为使用(true或false)
$ db.createCollection("teacher",{capped:true,autoIndexId:true,size:1024,max:1024})
$ db.userInfo.renameCollection("users") #集合重命名
$ db.userInfo.drop() #集合删除

$ db.getCollection("teacher") # 得到指定名称的聚集集合
$ db.getCollectionNames() # 得到当前db的所有聚集集合
$ db.printCollectionStats() # 显示当前db所有聚集索引的状态

$ db.yourColl.count() # 集合记录数
$ db.userInfo.dataSize() # 集合数据空间大小
$ db.person.stats() # 集合整体状态
$ db.userInfo.totalSize() # 得到聚集集合总大小
$ db.userInfo.storageSize() # 聚集集合储存空间大小

索引

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$ db.person.ensureIndex({"name":1})  
# 创建索引,数字1表示name键的索引按升序存储,-1表示name键的索引按照降序方式存储
$ db.person.getIndexes()
# 获取person表的所有索引
$ db.person.ensureIndex({"id":1,"age":1}
# 创建id和age的联合索引
$ db.person.dropIndex({"name":1})
# 删除person中字段name的索引
$ db.person.dropIndexes()
# 删除person的所有索引

$ db.person.ensureIndex({"id":1},{"unique":true})
# 缺省情况下创建的索引均不是唯一索引,使用"unique":true 创建唯一索引
$ db.person.ensureIndex({"id":1},{"unique":true,"dropDups":true})
# 针对已存在数据的列创建唯一索引,去掉重复的数据

$ db.person.reIndex()
# 获取person表的索引信息
$ db.system.indexes.find()
# 获取系统的所有索引信息
$ db.person.ensureIndex({"name":1},{"background":true})
# 使用"background":true后台建立索引,避免阻塞其他的操作


$ db.person.totalIndexSize()
# 查看person表的索引记录大小

CURD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# 插入
$ db.person.insert({"id":1,"name":"zhangsan","age":24})
$ db.person.save({"id":4,"name":"wuwang","age":30}) # 添加

# 查询
$ db.person.find()
# 相当于:select* from userInfo;默认每页显示20条文档,使用DBQuery.shellBatchSize= 50重新设置
$ db.person.find({"name":"zhangsan"}) # select * from person where name = ‘zhangsan’
# "$gt", "$gte", "$lt", "$lte", "$ne"
$ db.person.find({"age":{$gt: 22}})
# select * from person where age > 22
$ db.person.find({"name": /zhang/})
# select * from person where name like '%zhang%'
$ db.person.find({},{id:1,name:1})
# select id ,name from person 1:表示显示(true),0:表示不显示
$ db.person.find().sort({"age":1})
# select * from person order by age 1:升序,-1:降序
$ db.person.find().limit(2)
# select * from person limit 2
$ db.person.find().skip(5)
# select * from person where id not in (select top 5 id from person)
$ db.person.find().limit(10).skip(5)
# select * from person limit 5,5 用于分页查询
$ db.person.find({name:{$in:["zhangsan","haha"]}})
# select * from person where name in ("zhansgan","haha")
$ db.person.findOne() #查询第一条文档 = db.person.find().limit(1)
# select * from person limit 0,1
$ db.person.count() #总记录数 = db.person.find().count()
$ db.person.find({address:{$exits:true}}) #存在字段address字段的文档

# 数组
$ db.person.find( { "address.0": "china" })
# 获取address数组中第一个元素为"china"的文档
$ db.inventory.find( { num: { $elemMatch: { $gt: 5, $lt: 9 } } } )
# $elemMatch:为数组元素指定复合条件,以查询数组中至少一个元素满足所有指定条件的文档
# 获取ratings 数组中至少一个元素大于 ($gt) 5 且小于 ($lt) 9 的文档
$ db.inventory.find( { _id: 5 }, { ratings: { $slice: 2 } } )
# 使用 $slice 映射操作符以仅仅返回 ratings 数组里的前两个元素

# 修改
$ db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true);
# update users set name = ‘changeName’ where age = 25;
$ db.users.update({name: 'Lisi'}, {$inc: {age: 10}}, false, true)
# update users set age = age + 50 where name = ‘Lisi’
$ db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true)
# update users set age = age + 50, name = ‘hoho’ where name = ‘Lisi’

# 删除数据
$ db.users.remove({age: 132});

# 排序
$ db.person.find({"age":{$gt: 22}}).sort({"age":1})
# 使用sort函数给字段进行排序,1:表示正序,-1:表示倒序
db.collection.update( criteria, objNew, upsert, multi)
criteria:查询条件
objNew  :修改的描述
upsert  :如果记录不存在是否插入数据,true为插入,默认是false,不插入
multi   :默认为false,表示只更新一条记录,为ture表示更新全部查询记录
1
2
3
4
5
6
7
8
{$inc:{field:value}}  # 对数字字段field增加value
{$set:{field:value}} # 重新设置filed的值
{$unset:{field:1}} # 删除field字段,“1”无所谓,只要有值
{$push:{field:value}} # 将value追加到field里面去,field必须为数组列表,如果不存在,就会新建
{$pushAll:{field:value_array}} # 同$$push一样,只是可以同时追加多个value
{$addToSet:{field:value}} # 增加一个值到数组内,而且只有当这个值不在数组内才增加
{$pop:{field:1}} # 删除数组字段内的一个值 1:最后一个,-1:第一个,(-2,2相当于-1,1)
$ # 是他自己的意思,代表按条件找出的数组里面某项他自己

参考
【1】 http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html
【2】 http://docs.mongoing.com/manual-zh/
【3】 http://www.cnblogs.com/huangxincheng/category/355399.html

文章目录
  1. 1. MongoDB系列——入门篇
    1. 1.1. 安装(windows)
    2. 1.2. 启动与关闭
    3. 1.3. 基本操作(mongoDB 3.0.4)
      1. 1.3.1. 数据库
      2. 1.3.2. 用户
      3. 1.3.3. 集合
      4. 1.3.4. 索引
      5. 1.3.5. CURD