一、mongodb默认数据库和集合
mongodb默认的数据库有:admin,config,local。
1、admin(管理员的数据库)
管理员命令只能在此数据库执行。此数据库中的用户为超级用户,可对所有数据库进行操作,并能执行管理员命令。
(1)system.users集合:用户身份验证信息的集合
2、config(分片集群配置的数据库)
(1)changelog集合:分片集群变更记录信息的集合
每个文档包含以下字段:
- _id:操作的唯一标识符。
- clientAddr:触发操作的客户端地址。可能为
""
。 - details:操作详情。
- ns:集合的命名空间。
- server:操作发生的服务器地址。
- time:时间。
- what:操作。拆分为split,迁移为moveChunk.to。
(2)chunks集合:分片集群块信息的集合
每个文档包含以下字段:
- _id:块的唯一标识符。
- lastmod:块的版本。
Timstamp
类型,如:Timestamp(MAJOR, MINOR)
。MAJOR会在块被迁移至新的分片时改变,MINOR会在块被拆分时改变。 - lastmodEpoch:块的版本。
ObjectId
类型。 - max:块范围的最大值(不含)。
- min:块范围的最小值(含)。
- ns:块所属集合的命名空间。
- shard:块所属的分片。
(3)collections集合:分片集合信息的集合
每个文档包含以下字段:
- _id:集合的命名空。不包括非分片集合。
- distributionMode:
- dropped:
- lastmod:
- lastmodEpoch:
- key:片键。
- unique:片键是否是唯一索引。只当为true才有此字段。
- uuid:
(4)databases集合:数据库信息的集合
每个文档包含以下字段:
- _id:数据库名。不管数据库有没有被分片。
- lastMod:
- partitioned:是否被分片。
- primary:主分片。数据库的所有新集合默认创建在主分片上。
- version:
(5)locks集合:分片集群锁信息的集合
每个文档包含以下字段:
- _id:锁名称。balancer为均衡器。
- state:状态。非活跃为0,等待锁为1,均衡中为2。
- who:代表哪一个mongos。
(6)settings集合:设置信息的集合
每个文档包含以下字段:
- _id:设置名称。均衡器为balancer。块大小为chunksize。
- enabled:若
_id
为balancer,则为是否启动均衡器。 - activeWindow:均衡器的时间窗口。
- start:开始时间。
- stop:结束时间。
- value:若
_id
为chunksize,则为块大小,单位为MB。
(7)shards集合:分片信息的集合
每个文档包含以下字段:
- _id:分片名称。也为副本集名称。
- host:主机地址。格式为SHARD_NAME/HOST_PORT[,...]。
- state:状态。
- tags:分片标签数组。
(8)tags集合:分片标签信息的集合
每个文档包含以下字段:
- _id:标签ID。
- max:片键的最大值(不含)。
- min:片键的最小值(含)。
- ns:对应集合的命名空间。
- tag:标签名。
3、local(本地的数据库)
此数据库不会被复制。此数据库中的用户为超级用户,可对所有数据库进行操作,并能执行管理员命令。
(1)me集合:服务器自身信息集合
(2)oplog.rs集合:oplog操作日志的集合,是一个固定集合
(3)slaves集合:以当前节点作为同步源的节点信息的集合,包括影同步的节点信息
(4)startup_log集合:启动日志的集合
(5)system.replset集合:副本集配置的集合
包含一个文档,其字段同rs.config
的返回。副本集中所有节点的此文档都是相同的,不要自行修改此文档。
4、当前数据库
所有数据库都可以拥有以下集合:
(1)fs.chunks集合:GridFS文件块的集合
每个文档包含以下字段:
- _id:块ID。
- data:文件数据。
- files_id:文件ID。
- n:块在文件中的相对位置。
(2)fs.files集合:GridFS文件元信息的集合
每个文档包含以下字段:
- _id:文件ID。
- chunkSize:块字节大小。默认是256KB。
- filename:文件名。
- length:文件字节大小。
- metadata
- uploadDate:上传时间。
(3)system.profile集合:系统分析器记录信息的集合,是一个固定集合
每个文档包含以下字段:
- client:客户端地址。
- ns:集合的命名空间。
- op:操作类型。
二、mongodb的基本命令
show dbs #查看数据库
show collections #显示当前数据库中的集合(类似关系数据库中的表)
show users #显示用户
use DB2(库名) #选择数据库或新建一个数据库
#空数据库不在show dbs中显示!!
db.getName() #获取当前数据库的名称
show tables #查看当前数据库的表
db.help() #显示数据库操作命令,里面有很多的命令
db.foo.help()
#显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合(表),并非真正意义上的命令
db.person.insert() #向person表插入数据
db.person.find() #查询数据表person的数据
例:db.person.find({"sex":"女"}) #查询person表中sex字段为女的数据
db.person.update() #更新数据表person的数据
db.person.remove() #删除数据表person的数据
例:db.person.remove({"name":/m/}) #删除数据表person中name字段包含a的数据
db.person.drop() #删除数据表person
db.dropDatabases() #删除数据库
$gt 大于 >
$lt 小于 <
$gte 大于等于 >=
$lte 小于等于 <=
$ne 不等于 noe equals
$in 存在于
$nin 不存在于
$exists 是否存在
例:
db.collection.find({age:{$gt:18}}) #查看collection表中年龄大于不包含18岁的数据
db.collection.find({field:{$in:array}})
db.collection.find({field:{$nin:array}})
db.collection.find({title:{$exists:true}}) #如果记录中有包含title属性的全部返回
db.collection.find({title:{$exists:false}})
#如果记录中有包含title属性的全部不返回,不包含title属性的全部返回