MongoDB 使用及管理
一、基本数据类型
String − 字符串是最常用的数据类型,MongoDB中的字符串必须是UTF-8编码。
Integer − 整数类型用于存储数值。整数可以是32位,也可以是64位,这取决于你的服务器。
Boolean − 布尔类型用于存储布尔值(true/ false)。
Double − 双精度类型用于存储浮点值。
Min/ Max keys − 此类型用于将值与最低和最高的BSON元素进行比较。
Arrays − 此类型用于将数组、列表或多个值存储到一个键中。
Timestamp − ctimestamp。时间戳,用于记录文档何时被修改或创建。
Object − 这种数据类型用于嵌入文档。
Null − 此类型用于存储Null值。
Symbol − 此数据类型与字符串用法相同; 然而,它通常用于某些使用特定符号的语言。
Date − 此数据类型用于以UNIX时间格式存储当前日期或时间。您可以通过创建date对象,并将日、月、年传入其中,来指定自己的日期时间。
Object ID − 此数据类型用于存储文档的ID。
Binary data − 这种数据类型用于存储二进制数据。
Code − 此数据类型用于将JavaScript代码存储到文档中。
Regular expression − 此数据类型用于存储正则表达式。
二、创建数据库
1.use命令
MongoDB通过命令use 数据库名
创建数据库。如果数据库不存在,该命令将创建一个数据库,否则将返回已有数据库。
语法: use 数据库名
例1
> use testdb
switched to db testdb
2.db命令 显示当前数据库
例2
> db
testdb
3.show dbs命令 列出全部数据库
例3
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
刚创建的数据库(mydb)不在列表中,空数据库不会显示,需要向其插入至少一个文档。
例4
> use testdb
> db.site.insert({"name":"测试1"})
WriteResult({ "nInserted" : 1 })
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
testdb 0.000GB
三、删除数据库
1.dropDatabase() 方法 用于删除数据库
语法:db.dropDatabase()
例5
> show dbs 查看数据库
admin 0.000GB
config 0.000GB
local 0.000GB
testdb 0.000GB
>use testdb 切换数据库
switched to db testdb
> db.dropDatabase() 删除testdb数据库
{ "dropped" : "mydb", "ok" : 1 }
> show dbs 再次查看数据库
admin 0.000GB
config 0.000GB
local 0.000GB
四、创建集合
1.createCollection() 方法
基本语法:db.createCollection(name, options)
命令中,name
是要创建的集合名称,options
是一个文档,用于指定集合的配置
参数 类型 描述
Name String 要创建的集合名称
Options Document (可选)指定内存大小、索引等选项/td>
options
参数是可选的,下面是可以使用的选项列表:
字段 类型 描述
capped Boolean (可选)如果为真,则启用有上限的集合。封顶集合是一个固定大小的集合,当它达到最大大小时自动覆盖其最老的条目。 如果指定为真,还需要指定size参数。
size number (可选)为有上限的集合指定最大字节大小。如果capped为真,那么还需要指定该字段。
max number (可选)指定上限集合中允许的最大文档数量。
在插入文档时,MongoDB首先检查封顶集合的size
字段,然后检查max
字段。
例1
> use mydb
switched to db mydb
> db.createCollection("mycollection")
{ "ok" : 1 }
可以使用show collections命令检查当前数据库中的集合。
> show collections
mycollection
例2
> db.createCollection("mycollection3", { capped : true, size : 6142800, max : 10000 } )
{ "ok" : 1 }
MongoDB中,不需要创建集合,当插入文档时,MongoDB自动创建集合。
> db.test.insert({"post": "mongodb"})
WriteResult({ "nInserted" : 1 })
> show collections
mycollection
mycollection2
mycollection3
test
五、删除集合
1.drop( )方法 用于从数据库中删除集合
基本语法:
db.COLLECTION_NAME.drop()
> use testdb
switched to db testdb
> show collections
mycollection
mycollection2
mycollection3
test
现在删除名为mycollection2的集合
> db.mycollection2.drop()
true
如果集合被成功删除,drop()方法将返回true,否则返回false
再次到数据库中检查集合列表
> show collections
mycollection
mycollection3
test
六、插入更新记录
直接使用集合的save方法,如下所示
>db.storeCollection.save({'version':'3.5', 'segment':'e3ol6'})
更新记录,使用save会将原来的记录值进行覆盖实现记录更新。
七、查询记录
1.查询一条记录
使用findOne()函数,参数为查询条件,可选,系统会随机查询获取到满足条件的一条记录(如果存在查询结果数量大于等于1)示例如下所示:
> db.storeCollection.findOne({'version':'3.5'})
{
"_id" : ObjectId("4ef970f23c1fc4613425accc"),
"version" : "3.5",
"segment" : "e3ol6"
}
2.查询多条记录
使用find()函数,参数指定查询条件,不指定条件则查询全部记录。
> db.storeCollection.find()
{ "_id" : ObjectId("5de4ca25aa2840f0e82dcecc"), "version" : "3.5", "segment" : "e3ol6" }
八、删除记录
使用集合的remove()方法,参数指定为查询条件,示例如下所示:
> db.storeCollection.remove({'version':'3.5'})
WriteResult({ "nRemoved" : 1 })
> db.storeCollection.findOne()
null
九、创建索引
可以使用集合的ensureIndex(keypattern[,options])方法创建索引
> use pagedb
switched to db pagedb
> db.page.ensureIndex({'title':1, 'url':-1})
> db.system.indexes.find()
{ "name" : "_id_", "ns" : "pagedb.page", "key" : { "_id" : 1 }, "v" : 0 }
{ "name" : "_id_", "ns" : "pagedb.system.users", "key" : { "_id" : 1 }, "v" : 0}
{ "_id" : ObjectId("4ef977633c1fc4613425accd"), "ns" : "pagedb.page", "key" : {"title" : 1, "url" : -1 }, "name" : "title_1_url_-1", "v" : 0 }
ensureIndex方法参数中,数字1表示升序,-1表示降序。
使用db.system.indexes.find()可以查询全部索引。
十、查询索引
我们为集合建立的索引,那么可以通过集合的getIndexes()方法实现查询,示例如下所示:
> db.page.getIndexes()
[
{
"name" : "_id_",
"ns" : "pagedb.page",
"key" : {
"_id" : 1
},
"v" : 0
},
{
"_id" : ObjectId("4ef977633c1fc4613425accd"),
"ns" : "pagedb.page",
"key" : {
"title" : 1,
"url" : -1
},
"name" : "title_1_url_-1",
"v" : 0
}
]
当然,如果需要查询系统中全部的索引,可以使用db.system.indexes.find()函数。
十一、删除索引
db.mycoll.dropIndex(name) 删除指定名称索引
db.mycoll.dropIndexs() 删除指定集合的所有索引
十二、索引重建
可以通过集合的reIndex()方法进行索引的重建,示例如下所示:
> db.page.reIndex()
{
"nIndexesWas" : 2,
"msg" : "indexes dropped for collection",
"ok" : 1,
"nIndexes" : 2,
"indexes" : [
{
"name" : "_id_",
"ns" : "pagedb.page",
"key" : {
"_id" : 1
},
"v" : 0
},
{
"_id" : ObjectId("4ef977633c1fc4613425accd"),
"ns" : "pagedb.page",
"key" : {
"title" : 1,
"url" : -1
},
"name" : "title_1_url_-1",
"v" : 0
}
],
"ok" : 1
}
十三、db.baseSe.count() 统计集合记录数
> use test
switched to db test
> db.baseSe.count()
300
上述统计了数据库test的baseSe集合中记录数。
十四、db.baseSe.find().count()查询并统计结果记录数
find()可以提供查询参数,然后查询并统计结果
> use test
switched to db test
> db.baseSe.find().count()
300
上述执行先根据查询条件查询结果,然后统计了查询数据库test的baseSe结果记录集合中记录数。
十五、查询指定数据库的集合当前可用的存储空间
db.baseSe.storageSize()
> db.baseSe.storageSize()
142564096
十六、查询指定数据库的集合分配的存储空间
> db.baseSe.totalSize()
144096000
上述查询结果中,包括为集合(数据及其索引存储)分配的存储空间。
十七、启动与终止
十八、命令及帮助
1.help帮助文档
> help
2.db.serverStatus() 查看数据库状态
有时,通过查看数据库服务器的状态,可以判断数据库是否存在问题,如果有问题,如数据损坏,可以及时执行修复
3.查询指定数据库统计信息
use <DBname>
db.stats()
> use test
switched to db test
> db.stats()
{
"db" : "test",
"collections" : 1,
"views" : 0,
"objects" : 1,
"avgObjSize" : 37,
"dataSize" : 37,
"storageSize" : 16384,
"numExtents" : 0,
"indexes" : 1,
"indexSize" : 16384,
"fsUsedSize" : 4523339776,
"fsTotalSize" : 90334732288,
"ok" : 1
}
显示test数据库的统计信息。
4.db.getCollectionNames() 查询指定数据库包含的集合名称列表