MongoDB 基本操作
MongoDB 是一个面向文档存储的数据库
数据库
- 一个MongoDB 中可以创建多个数据库,每个数据库都有自己的集合和权限,不同的数据库存放在不同的文件中。
- 数据库命名规则
- 不能是空字符串
- 不能含有”(空格)、.、$、/、\和\0(空字符)
- 应全部小写
- 最多64字节
- 特殊数据库
- admin :要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
- local :这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
- config :当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
- 基本操作
- show dbs 显示所有数据库
- db 显示当前数据库对象
- use db_name 连接到指定数据库
文档
- 介绍:文档是一组键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
一个简单的文档例子如下:
{"site":"www.baidu.com", "name":"百度"}
- 文档键命名规范:
- 键不能含有\0 (空字符)。这个字符用来表示键的结尾。
- .和$有特别的意义,只有在特定环境下才能使用。
- 以下划线”_”开头的键是保留的(不是严格要求的)。
常用命令
数据库的登录
1、启动/停止mongo服务端
service mongod start/stop
/etc/init.d/mongod start/stop
在 mongo SHELL 中停止
use admin
db.shutdownServer()
2、连接服务端
- 连接本地服务器时,当未开启安全认证
执行 mongo 命令,使用无密码登陆。
- 使用密码连接服务器
使用admin数据库创建用户
db.createRole({createRole:"anyActionAndanyResource",privileges:[ {resource:{anyResource:true}, actions:['anyAction']}],roles:[]})
db.createUser({user:"scutech",pwd:"dingjia",roles:[{role:"backup",db:"admin"},{role:"restore",db:"admin"},{role:"anyActionAndanyResource",db:"admin"}]})
编辑配置文件/etc/mongod.conf,增加参数如下,并重启mongod服务。
security:
authorization: enabled
连接服务器方式
mongo -u username -p password --authenticationDatabase admin
数据库基本命令
1、查看帮助列表
help
2、 显示数据库列表
show dbs;
3、创建数据库
use DATABASE_NAME
要显示刚新建的数据库,我们需要向数据库插入一些数据
如果数据库不存在,则创建数据库,否则切换到指定数据库。
4、 删除当前数据库
db.dropDatabase()
5、显示当前数据库中的集合
show collections
6、删除集合
db.collection.drop()
7、使用 insert() 或 save() 方法向集合中插入文档
db.COLLECTION_NAME.insert(document)
8、查询数据
db.COLLECTION_NAME.find()
需要以易读的方式来读取数据,可以使用 pretty() 方法
db.COLLECTION_NAME.find().pretty()
9、删除文档
db.COLLECTION_NAME.remove({:})
删除所有文档
>db.col.remove({})
10、数据库统计信息:db.stats()
MongoDB Enterprise hxf:PRIMARY> db.stats()
{
"db" : "test", //数据库名
"collections" : 2, //集合数量
"views" : 0,
"objects" : 12, //文档数量
"avgObjSize" : 278.4166666666667, //平均每个文档的大小
"dataSize" : 3341, //数据占用空间大小
"storageSize" : 32768, //数据库存储大小
"numExtents" : 0,
"indexes" : 1,
"indexSize" : 16384,
"ok" : 1
}
11、集合统计信息:db.collection.stats()
用户操作
1、添加用户
mongo 连接实例
use admin
执行命令创建用户
db.createUser({user:"scutech",pwd:"dingjia",roles:[{role:"backup",db:"admin"},{role:"restore",db:"admin"}]})
2、查看用户及其权限
首先需要使用数据库:
如: use admin
然后就查看数据库中的用户及其权限:
> show users
3、创建具有anyAction和anyResource权限的角色:
db.createRole({createRole:"anyActionAndanyResource",privileges:[ {resource:{anyResource:true}, actions:['anyAction']}],roles:[]})
4、创建能够恢复到指定时间点的用户(具有anyAction和anyResource权限)
db.createUser({user:"scutech",pwd:"dingjia",roles:[{role:"backup",db:"admin"},{role:"restore",db:"admin"},{role:"anyActionAndanyResource",db:"admin"}]})
5、删除用户
db.system.users.remove({user:"yudan"});
6、显示所有用户
MongoDB Enterprise > use admin
switched to db admin
MongoDB Enterprise > db.system.users.find();
{ "_id" : "admin.zhou", "user" : "zhou", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "ZTJ90yieiPKmUejVSdY6PQ==", "storedKey" : "blKrX2BYdX2R1yFrzs2DUZ8/5TE=", "serverKey" : "Nanrx+0LnT+wdFgl48wzneKdqyc=" } }, "roles" : [ { "role" : "backup", "db" : "admin" }, { "role" : "restore", "db" : "admin" } ] }
{ "_id" : "admin.yudan", "user" : "yudan", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "mJlSPfmFteGLkoqoj8LnLg==", "storedKey" : "Ap3fmmSdA8wyvAuRT9SXIEuocWU=", "serverKey" : "YsL1HHHBStT30DcDqiXnLD0SdII=" } }, "roles" : [ { "role" : "backup", "db" : "admin" }, { "role" : "restore", "db" : "admin" }, { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
集合操作
1、创建集合
MongoDB Enterprise > db.runoob.insert({"name":"xutian","age":38,"job":"accountant");
WriteResult({ "nInserted" : 1 })
2、显示所有集合
MongoDB Enterprise > show collections;
people
runoob
文档操作
1、文档插入
MongoDB Enterprise > db.people.insert({"name":"xutian"});
WriteResult({ "nInserted" : 1 })
2、查看文档
MongoDB Enterprise > db.people.find();
{ "_id" : ObjectId("5839201db9e36f36346d9b3e"), "name" : "xutian" }
{ "_id" : ObjectId("583929fea5218b20de4ef8d7"), "name" : "tiandan", "age" : 24, "job" : "doctor" }
{ "_id" : 3, "name" : "xuMother", "age" : 56, "job" : "No" }
3、更新文档
语法
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
MongoDB Enterprise > db.people.update({"name":"tiandan"},{$set:{"age":25}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
4、删除文档
db.runoob.remove({"name":"xutian"})