目录
Mongodb数据按照文档的形式,保存在数据库中。文档的结构是类似JSON的BSON结构。一个文档,对应关系型数据库中的数据记录。同样,在mongodb中,也有与关系型数据库结构中表相对应的结构——集合。
集合
Mongodb将文档保存在集合中,集合类似关系型数据库中的表。下图中collection表示一个集合,集合中有多个文档。文档结构不强制要求一致。但用户可以按照需要,对插入集合中的数据进行结构验证。无法通过验证的数据,在插入数据时,数据库会按照用户指定的验证规则,插入失败并提示错误。
创建集合
在Mongodb中,创建集合的方式很灵活,使用方法db.createCollection()显式创建集合。也可以通过插入数据和创建索引的方式。隐式创建集合。
显式创建集合
显式创建,使用方法db.createCollection()显式创建集合,并可以指定创建集合所用到的参数。如集合大小,文档验证规则等。如果不需要特殊指定集合参数,可以使用隐式创建集合方法。
db.createCollection(name, options)
db.createCollection( <name>,
{
capped: <boolean>,
timeseries: { // Added in MongoDB 5.0
timeField: <string>, // required for time series collections
metaField: <string>,
granularity: <string>,
bucketMaxSpanSeconds: <number>, // Added in MongoDB 6.3
bucketRoundingSeconds: <number> // Added in MongoDB 6.3
},
expireAfterSeconds: <number>,
clusteredIndex: <document>, // Added in MongoDB 5.3
changeStreamPreAndPostImages: <document>, // Added in MongoDB 6.0
size: <number>,
max: <number>,
storageEngine: <document>,
validator: <document>,
validationLevel: <string>,
validationAction: <string>,
indexOptionDefaults: <document>,
viewOn: <string>,
pipeline: <pipeline>,
collation: <document>,
writeConcern: <document>
}
)
显式创建集合时,必须要指定集合名称,后面的options对象,是可选配置,按照用户需要指定options内容。
隐式创建集合
第一次向不存在的集合插入数据时或第一次向不存在的集合创建索引时,mongodb会创建该集合。
db.newCollection.insertOne({x: 1})
db.newCollection.createIndex({y: 1})
集合命名
MongoDB 的数据库中包含多个集合,针对集合名称,mongodb有下面的几点限制和建议
- 使用小写字母或下划线开头
- 不可以包含$字符,空格字符,空字符
- 不能以system.开头, system.开头被保留在mongodb系统内部使用
- 包含下划线或数字开头的集合名称, 可以使用方法db.getCollection()方法获取集合对象
- 长度限制
-
- 4.4版本以后,不分片的集合和视图名称长度,不得超过255bytes, 分片集合和视图,不得超过235bytes。
- 4.2版本及4.2版本前,不分片的集合和视图名称长度,不得超过120bytes, 分片集合和视图,不得超过100bytes。
文档验证
默认创建的mongodb集合,不强制要求文档具有相同的结构。如在同一个集合的文档中,不同的集合可以有不同的字段或字段类型。
自mongodb3.2版本开始,用户可以在创建和更新数据库时,添加文档验证规则。
修改文档结构
当文档创建并插入数据后,用户可以使用更新语句,对文档结构进行更改。如添加新字段,删除已有字段,修改字段类型等。
集合ID
集合创建时,mongodb就为集合添加了唯一不可变的UUID作为集合ID。在所有的复制集节点和分片中,同一个集合保持相同的uuid。使用listCollection命令或db.getCollectionInfos()命令可以查看集合ID。
db.getCollectionInfos()
{
"name" : "books",
"type" : "collection",
"options" : {
},
"info" : {
"readOnly" : false,
"uuid" : UUID("49a46021-b3bf-4d6a-adc4-2f018cd28ecc") //集合id
},
"idIndex" : {
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
}
}
db.runCommand({listCollections: 1})
{
"name" : "school",
"type" : "collection",
"options" : {
},
"info" : {
"readOnly" : false,
"uuid" : UUID("075452e6-df62-4117-90b1-0e4c098d1860") //集合id
},
"idIndex" : {
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
}
},
数据库
一个运行的mongodb 实例中,用户可以创建一个或多个数据库。在mongodb安装后, mongodb也会默认安装admin, config, local数据库。用来保存数据库监控信息、用户信息等运行相关信息。
一个数据库,保存一个或多个集合。用户可以按照业务功能划分,将同一类集合保存的一个数据库。
创建数据库
第一次向不存在的数据库插入数据时,mongodb会创建集合并创建数据库。下面的插入语句,执行时mongodb创建了集合newCollection,并创建了数据库newDB.
use newDB
db.newCollection.insertOne({newField: 'FieldValue'})
切换数据库
使用use命令,切换数据库
use <dbname>
数据库命名
Mongodb数据库名称大小写敏感。即使用大写字母或小写字母区分,可以定义出不同的数据了。如sample_database与Sample_database代表两个不同的数据库。但mongodb的官方文档中,并不支持使用仅带有不同大小写字母的相同字母序列来区分两个数据库。使用上很难区分,容易出错。
- windows系统下,数据库名称中不能包含/\."$*<>:|?,也不允许包含空字符
- unix或linux系统中,数据库名称中不能包含/\."$,也不允许包含空字符
- 数据库名称长度不能超过64个字符