0402自学web后端之——MongoDB安装、基本概念与基本操作

安装

  • docker方式
>>> docker pull mongo:latest
>>> docker run -itd --name mongo --restart always -p 27017:27017 mongo --auth
# 进入客户端 admin为数据库名称
>>> docker exec -it mongodb mongo admin
db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'}]});

基本概念

  • 对比
SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

参考:https://www.runoob.com/mongodb/mongodb-databases-documents-collections.html

  • 角色

Built-In Roles(内置角色):

  1. 数据库用户角色:read、readWrite;
  2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
  3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  4. 备份恢复角色:backup、restore;
  5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  6. 超级用户角色:root

read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
backup,retore:在进行备份、恢复时可以单独指定的角色,在db.createUser()方法中roles里面的db必须写成是admin库,要不然会 报错
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限,
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限
参考:https://www.crifan.com/mongodb_create_normal_gridfs_root_user_fail_error_couldnt_add_user_no_role_named_root_gridfs/

基本操作

# 进入admin数据库shell界面
>>> docker exec -it mongodb mongo admin

# 使用admin账号进行身份认证
>>> db.auth('admin', '123456')
1

# 创建api数据库拥有readWrite权限的账户
>>> db.createUser({ user:'user',pwd:'123456',roles:[ { role:'readWrite', db: 'api'}]});
Successfully added user: {
	"user" : "user",
	"roles" : [
		{
			"role" : "readWrite",
			"db" : "api"
		}
	]
}

# 查看集合
>>> show collections
xxxxx
>>> show tables
xxxxx

# find一条数据
>>> db.users.findOne()
{
	"_id" : ObjectId("5e85aafdd96c8fec786818fc"),
	"email" : "[email protected]",
	"password" : "pbkdf2:sha256:150000$pkN824ob$4fecb14593f491e829c2760072d652891eb759859619eb8457fa52ca13ebb006",
	"active" : false
}
# find所有数据
>>> db.users.find()
{ "_id" : ObjectId("5e85aafdd96c8fec786818fc"), "email" : "[email protected]", "password" : "pbkdf2:sha256:150000$pkN824ob$4fecb14593f491e829c2760072d652891eb759859619eb8457fa52ca13ebb006", "active" : false }
# find所有数据(格式化显示输出)
>>> db.test.find().pretty()
{
	"_id" : ObjectId("5e85aafdd96c8fec786818fc"),
	"email" : "[email protected]",
	"password" : "pbkdf2:sha256:150000$pkN824ob$4fecb14593f491e829c2760072d652891eb759859619eb8457fa52ca13ebb006",
	"active" : false
}

# insert一条数据
>>> db.test.insert({'test_id': 12345, 'test': '测试'})
WriteResult({ "nInserted" : 1 })
>>> db.test.findOne()
{
	"_id" : ObjectId("5e8c446cf19bca7092dfbc51"),
	"test_id" : 12345,
	"test" : "测试"
}

# update一条数据
>>> db.test.update({'test_id': 12345}, {$set:{'test_id': 54321}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
>>> db.test.findOne()
{
	"_id" : ObjectId("5e8c446cf19bca7092dfbc51"),
	"test_id" : 54321,
	"test" : "测试"
}

# remove一条数据
>>> db.test.remove({'test_id':54321})
WriteResult({ "nRemoved" : 1 })

MongoDB 与 RDBMS Where 语句比较

操作 格式 范例 RDBMS中的类似语句
等于 {:} db.col.find({“by”:“菜鸟教程”}).pretty() where by = ‘菜鸟教程’
小于 {:{$lt:}} db.col.find({“likes”:{$lt:50}}).pretty() where likes < 50
小于或等于 {:{$lte:}} db.col.find({“likes”:{$lte:50}}).pretty() where likes <= 50
大于 {:{$gt:}} db.col.find({“likes”:{$gt:50}}).pretty() where likes > 50
大于或等于 {:{$gte:}} db.col.find({“likes”:{$gte:50}}).pretty() where likes >= 50
不等于 {:{$ne:}} db.col.find({“likes”:{$ne:50}}).pretty() where likes != 50

参考:https://www.runoob.com/mongodb/mongodb-query.html
参考:https://zhuanlan.zhihu.com/p/26215701

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章