MongoDB入门
一. 基础概念
在mongodb中是通过数据库、集合、文档的方式来管理数据,下边是mongodb与关系数据库的一些概念对比:
SQL术语/概念 |
MongoDB术语/概念 |
解释/说明 |
database |
database |
数据库 |
table |
collection |
数据库表/集合 |
row |
document |
数据记录行/文档 |
column |
field |
数据字段/域 |
index |
index |
索引 |
table joins |
|
表连接(MongoDB不支持) |
primary key |
primary key |
主键,MongoDB自动在每个集合中添加_id的主键 |
- 1、一个mongodb实例可以创建多个数据库
- 2、一个数据库可以创建多个集合
- 3、一个集合可以包括多个文档。
二. 数据库操作:命令行
首先的话,可以打开命令窗口去试试
用管理员打开cmd,然后跳到对应安装目录进行启动
-
查询全部数据库
show dbs
-
显示当前数据库
- 如果当前没有切换数据库,默认显示“test”
db
-
-创建/切换数据库
-
- 数据库存在则切换到此数据库,不存在则创建
- 注意:新创建的数据库不显示,需要至少包括一个集合。
use 数据库名称
-
删除数据库(慎用!!!)
db.dropDatabase()
三. 集合操作:命令行
集合相当于关系数据库中的表,一个数据库可以创建多个集合,一个集合是将相同类型的文档管理起来。
-
创建集合
db.createCollection(name, options)
name: 新创建的集合名称
options: 创建参数
-
删除集合
db.集合名称.drop()
use demo
show collections
db.student.drop()
-
显示集合
show collections
扩展:集合创建过程可以设置参数的
在demo数据库中,创建book集合,并限定最大文档数为3
- 参数capped: 如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。
- 参数size: 为固定集合指定一个最大值,以千字节计(KB)。如果 capped 为 true,必须指定size字段。
- 参数max: 指定固定集合中包含文档的最大数量。
use demo
db.createCollection('book', { capped: true,size: 1024 , max : 3 } )
三.文档操作
mongodb中文档的格式是json格式,下边就是一个文档,
包括两个key:_id主键和name
{ "_id" : ObjectId("5b2cc4bfa6a44812707739b5"), "name" : "传智专修学院" } |
---|
注意:
-
插入命令
- 每个文档默认以_id作为主键,主键默认类型为ObjectId(对象类型)
- mongodb会自动生成主键值。
db.集合名称.insert(document)
db.student.insert({"name":"张三","age":10})
-
查询命令
db.book.find()
db.book.find( {"age": 18} ) //一个条件
db.book.find( {"age": 18,"name":"张3"} ) //多条件
--- 查询 age 为 18 所有数据,仅显示name的值
db.book.find( {"age": 18} , {"name":1})
--- 查询所有数据,仅显示name的值
db.book.find( {} , {"name" : 1} );
-
更新文档
- 命令格式
db.collection.update( <query>, <update>, <options> ) query:查询条件,相当于sql语句的where update:更新文档内容 options:选项 |
---|
-
替换文档
-- 将符合条件 "name":"张三"的第一个文档替换为{"name":"张3","age":21}。
db.student.update({"name":"张三"},{"name":"张3","age":21})
-- 查询 age = 18 信息,将第一条替换 {name: 张三 }
db.book2.update({ "age": 18 },{ "name" : "张三" })
-
$set修改器
-
使用$set修改器指定要更新的key,key不存在则创建,存在则更新。
-
db.student.update({"name":"张3"},{$set: {"name":"张33"} })
db.student.update({"name":"张33"},{$set: {"sex":"男"} })
-
multi替换所有
- multi:false表示更新第一个匹配的文档,true表示更新所有匹配的文档。
db.student.update({"name":"张三"},{$set:{ "age":15}},{multi:true})
四.删除文档
db.集合名称.remove(<query>)
query:删除条件,相当于sql语句中的where
-
删除符合条件的文档
db.student.remove({"name":"张33"})
-
通过id删除
db.student.remove({"_id" : ObjectId("5edcfb4cb7376427b4111714")})
-
删除所有文档
db.student.remove({})
五. 用户操作:命令行
-
创建用户
- 语法格式:
db.createUser({ user: "<name>", pwd: "<cleartext password>", customData: { <any information> }, roles: [ { role: "<role>", db: "<database>" } | "<role>", ... ] }) |
---|
-- 创建root用户,角色为root
use admin
db.createUser({
user:"root",
pwd:"root",
roles:[{role:"root",db:"admin"}]
})
注意:
你想在哪个数据库下创建,就首先use 哪个数据库 ,然后再进行命令操作
- 内置角色
角色分类 |
取值 |
描述 |
超级用户角色 |
root |
|
数据库用户角色 |
read |
|
readWrite |
|
|
数据库管理角色 |
dbAdmin |
|
dbOwner |
|
|
userAdmin |
|
|
集群管理角色 |
clusterAdmin |
|
clusterManager |
|
|
hostManager |
|
|
clusterMonitor |
|
|
备份恢复角色 |
backup |
|
restore |
|
|
所有数据库角色 |
readAnyDatabase |
|
readWriteAnyDatabase |
|
|
userAdminAnyDatabase |
|
|
dbAdminAnyDatabase |
|
-
查询用户
- 查询当前库下的所有用户
show users
-
修改用户
- 语法格式
db.updateUser( "<username>", { customData : { <any information> }, roles : [ { role: "<role>", db: "<database>" } | "<role>", ... ], pwd: "<cleartext password>" }, writeConcern: { <write concern> } ) |
---|
-- 修改root用户的角色为readWriteAnyDatabase
use admin
db.updateUser("root",{roles:[{role:"readWriteAnyDatabase",db:"admin"}]})
-
.修改密码
- 语法格式
db.changeUserPassword("username","newPasswd")
-- 修改root用户的密码为1234
use admin
db.changeUserPassword("root","1234")
-
删除用户
- 语法格式:
db.dropUser("用户名")
看完恭喜你,又知道了一点点!!!
你知道的越多,不知道的越多!
~感谢志同道合的你阅读, 你的支持是我学习的最大动力 ! 加油 ,陌生人一起努力,共勉!!