前端mongodb入门

772 阅读2分钟

安装

使用docker安装mongodb

// 搜素镜像
docker search mongo

// 获取镜像
docker pull mongo

// 运行container
docker run -d -p 27017:27017 -v mongo_configdb:/data/configdb -v mongo_db:/data/db --name mongo docker.io/mongo --auth

其中--auth表示开启权限认证,mongo默认是不启用权限认证的,不开启的后果可以查看这篇文章

使用mongo进入container

docker exec -it mongo mongo

呼出mongo命令交互

安装可视化工具

Robo 3T

概念

db——数据库

mongodb单个实例可以由多个互相独立的数据库组成,每一个都有自己的集合和权限,可以使用use [dbName] 创建一个db

collections——集合

集合类似与sql中的表,是一类数组的集合,可以使用

db.[collectionsName].insert({name:"document"})

往collectionsName这个集合插入一条数据。 值得注意的是:

  1. mongo的集合比起表更灵活,没有限制数据的格式等,可以在表中插入不同格式和类型的数据。交给开发者自行维护,可以通过Mongoose来约束类型等。

document——文档

文档即一条数据,文档组成集合。

使用

用户及权限

创建超级用户

use admin  // 使用admin数据库
db.createUser({"user":"root","pwd":"xxxtech","roles":["root"]})  // 创建root权限的用户
outPut: Successfully added user: { "user" : "root", "roles" : [ "root" ] }

创建普通用户

运行

db.createUser({
	"user": "test2",  // 用户
	"pwd": "test2",  // 密码
	"roles": [{
		role: "readWrite", // 角色
		db: 'test'  // 数据库
	}]
})

output:

{
	"user": "test2",
	"roles": [{
		"role": "readWrite",
		"db": "test"
	}]
}

创建了一个能读和写test数据库的用户test2

用户权限获取

db.auth("licb","pwd")

值得一提的是,如果比如你是root用户,那么你只能在admin数据库下先认证用户权限,才可以去别的数据库进行操作,不能直接在如test数据库操作

常用命令

杂项

查看所有数据库
show dbs
查看当前数据库下的所有集合名称
db.getCollectionNames()

show collections
查看当前使用的数据库
db.getName()
查看帮助

增加一条文档

insertOne 或者 insert

db.[collectionsName].insertOne({
    name:"li",
    age:"23",
    job:"Front-end Developer"
})

增加多条

db.[collectionsName].insertMany([
  {
    love: "liu"
  },
  {
    love: "girl"
  }
]);

查找数据

简单查找

db.[collectionsName].find({
    age:23
})

相当于

select * from [collectionsName] where age=23

意思是找出集合中 age 为 23(数值类型)的所有文档,age为 "23"的不会显示

列筛选

忽略age以外的列
 db.[collectionsName].find({},{"age":1})

相当于

select age from [collectionsName]
忽略age
db.[collectionsName].find({},{"age":0})

相当于

select age from [collectionsName]

查询运算符查询

$in运算符

$in表示name为值之一

db.collecgtions.find({
	name: {
		$in: ["li", "liu"]
	}
})

相当于

SELECT * FROM collecgtions WHERE name in ("li", "liu")
其他运算符

其他运算符

修改

更新一条数据
 db.collection.updateOne({age:30},{$set:{age:34}})

意思是:把age为30岁的一条数据中的 age字段更新为 34

更新多条文档
 db.collection.updateMany({age:30},{$set:{age:34}})

删除

删除集合
db.collection.drop()
删除一条文档
db.collection.deleteOne({age:30})

删除age为30的一条文档

删除多条文档
db.collection.deleteMany({age:30})

outPut:

{ "acknowledged" : true, "deletedCount" : 4 }