mongodb

docker安装mongodb

sudo docker pull mongo #拉取镜像
sudo docker run -itd --name mongo -p 27017:27017 mongo --auth #创建容器实例
docker exec -it mongo mongosh admin #进入容器,直接进入admin数据库

  • -itd:交互式/命令行/后台运行
  • –auth: 需要用户密码登录

创建用户

use admin //进入admin数据库
//创建用户:用户名为“yi”,密码为"123456,",用户属于admin数据库,并且拥有userAdminAnyDatabase,readWriteAnyDatabase权限,在所有数据库为管理员权限并且可读可写。
db.createUser({ user:'yi',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]})
//登录
db.auth('yi','123456')

注意:通常一个用户只属于一个数据库,只对该数据库拥有权限。

Mongodb三大块:数据库(database)、集合(collection)、文档(document)。一个数据库中可以有多个集合,一个集合中可以有多个文档。

mongodb基本操作

展示

show dbs //展示所有数据库
show collections //展示所有集合
db.<collection>.find() //展示集合中的所有文档(document)

CRUD

查询

find查询返回的是一个数组,findOne返回对象可用.获取属性 
db.<collection>.find()  查询collection中所有文档 
db.<collection>.find({name:'yi'}) 根据指定条件查询collection中文档
db.<collection>.findOne()   查询符合条件的第一个文档
db.<collection>.find().countDocuments() 查询符合条件的文档数
db.<collection>.find({"hobby.address":"china"}) 查询嵌套文档
db.<collection>.find(num,{$gt:50}) 查询num>50
db.<collection>.find().limit(5) 只显示查询的前5条
db.<collection>.find().skip(5).limit(5) 查询6~10条数据 
db.<collection>.find().sort({sal:1}) 按照sal升序排序
db.<collection>.find().sort({sal:-1}) 按照sal降序排序
db.<collection>.find().sort({sal:1,empno:-1}) 按照sal升序排序,empno降序排序
db.<collection>.find({}, {"userName":1,"_id":0}) 只查询userName字段,不显示_id

插入

db.<collection>.insertone({name:'yi',age:18});  插入一个对象
db.<collection>.insertmany([
{name:'yi',age:18},
{name:'liu'}
]);  插入n个对象

注意:插入时如果没有指定_id,则会为_id添加Object_id作为唯一标识。
在这里插入图片描述

修改、删除

updateOne只会修改符合条件的一个文档,updateMany会修改符合条件的所有文档
db.<collection>.updateOne({name:'liu'},{$set:{address:‘china’}})  用操作符$set将符合条件的文档设立/更新address属性
db.<collection>.updateOne({name:'liu'},{$unset:{address:1}})   用操作符unset将符合条件的文档address属性删除
db.<collection>.updateMany(筛选条件,修改操作)  案例同上
$push 向数组中加入,$addToSet 向集合中加入
更多操作符:Update Operators — MongoDB Manual
db.<collection>.replaceOne(筛选条件,替代对象)

删除

db.<collection>.deleteOne(筛选条件)
db.<collection>.deleteMany(筛选条件)
db.<collection>.deleteMany({age:{$in:[1,2,3]}}) //删除age为1,2,3的文档
db.dropDatabase() 删除当前数据库
db.<collection>.drop() 删除当前集合

go操作MongoDB

导包

go get go.mongodb.org/mongo-driver/mongo
go get go.mongodb.org/mongo-driver/bson

代码实例

连接数据库
client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI("mongodb://yi:[email protected]:27017/?authSource=admin"))
	if err != nil {
		panic(err)
	}
	//检测连接是否成功
	err = client.Ping(context.TODO(), nil)
	if err != nil {
		panic(err)
	}
	defer func() {
		if err := client.Disconnect(context.TODO()); err != nil {
			panic(err)
		}
	}()
	testDb := client.Database("test", nil)
	col := testDb.Collection("test")

查询

	//查询
	cur, err := col.Find(context.Background(), bson.D{{"age", bson.D{{"$lt", 20}}}}, nil)
	if err != nil {
		panic(err)
	}
	type K struct {
		Id   string 
		Age  int   
		Name string 
	}
	k := K{}

	for cur.Next(context.Background()) {
		cur.Decode(&k)
		fmt.Println(k)
	}

插入

	//插入: insert({id:"10",age:66,name:"jjk"})
	insertK := K{Id: "10", Age: 66, Name: "jjk"}
	res, err := col.InsertOne(context.Background(), insertK, nil)
	if err != nil {
		panic(err)
	}
	fmt.Println(res.InsertedID)

删除

	//删除
	res2, err := col.DeleteMany(context.Background(), bson.D{{"name", "jjk"}})
	if err != nil {
		panic(err)
	}
	println(res2.DeletedCount)

更新

	//update({"name":yi},{$set:{"age":21}})
	res3, err := col.UpdateOne(context.Background(), bson.D{
		{"name", "liu"},
	}, bson.D{
		{"$set", bson.D{{"age", 21}}},
	})
	fmt.Println(res3)

你可能感兴趣的:(mongodb,数据库,golang)