Golang之MongoDB基础使用

365 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

MongoDB是介于关系性数据库与非关系性数据库中的数据库,具有高性能、易安装、数据易操作等特性。本文主要讲解MongoDB的安装、连接、命令行的基础使用,以及基于mongo-go-drive来对MongoDB进行CRUD操作。

官方文档:pkg.go.dev/go.mongodb.…

安装

推荐采用Docker的方式进行安装,MONGO_INITDB_ROOT_USERNAME指定登录MongoDB的用户名、MONGO_INITDB_ROOT_PASSWORD指定MongoDB的密码。

# 创建网络
docker create network some-network

# 启动MongoDB服务
docker run -d --network some-network --name some-mongo \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=admin \
-p 27017:27017 \
mongo

命令行使用

首先进入容器、登录MongoDB命令行操作界面

# 进入MongoDB容器
docker exec -it some-mongo /bin/bash

# 登录MongoDB命令行界面
mongo -u admin -p admin

数据库相关操作

# 查看数据库列表
show dbs;

# 创建数据库,数据库不存在时创建数据库,数据库存在时选中数据库
use db_name

# 删除数据库
db.dropDatabase()

集合(可以理解为MySQL中的表)相关操作

# 集合列表查看
show collections

# 创建集合
# 可以在创建文档的时候直接指定集合名称,当集合存在时会自动创建集合
db.createCollection("集合名称")

# 修改集合
db.集合的旧名称.renameCollection("集合的新名称")

# 删除集合
db.集合名称.drop()

文档(可以理解为MySQL中的一条条记录)相关操作

# 查询指定集合的文档列表
db.集合名称.find()

# 插入文档
db.集合名称.insert({"name":"getchar","age":18})

# 文档更新
# db.集合名称.update(查询条件,更新的内容)
# 实例如下,查询_id=62939a29c62348bc1557ee4e的数据,只对name进行更新操作
db.tb2.update({"_id":ObjectId("62939a29c62348bc1557ee4e")},{$set:{"name":"get"}})

# 删除文档
# db.集合名称.remove(查询条件)
# 实例如下,查询_id=629397fec62348bc1557ee4d的数据,并将其删除
db.tb2.remove({"_id" : ObjectId("629397fec62348bc1557ee4d")})

golang 模块安装

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

基于golang 模块的基础使用

文档列表查询

ctx, cancelFunc := context.WithTimeout(context.Background(), time.Second*10)
defer cancelFunc()
client, _ := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://账号:密码@localhost:27017"))
collection := client.Database("数据库名称").Collection("集合名称")
cur, _ := collection.Find(ctx, bson.D{})
for cur.Next(ctx) {
   println(cur.Current.String())
}

新增文档数据

ctx, cancelFunc := context.WithTimeout(context.Background(), time.Second*10)
defer cancelFunc()
client, _ := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://账号:密码@localhost:27017"))
collection := client.Database("数据库名称").Collection("集合名称")
res, _ := collection.InsertOne(ctx, bson.M{"name":"Getchar", "age": 18})
fmt.Println(res.InsertedID)

文档数据修改

ctx, cancelFunc := context.WithTimeout(context.Background(), time.Second*10)
defer cancelFunc()
client, _ := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://账号:密码@localhost:27017"))
collection := client.Database("数据库名称").Collection("集合名称")
// 更新一条数据
one, _ := collection.UpdateOne(ctx, bson.M{"name": "Getchar"}, bson.M{"$set": bson.M{"age": 19}})
fmt.Println(one)

文档删除

ctx, cancelFunc := context.WithTimeout(context.Background(), time.Second*10)
defer cancelFunc()
client, _ := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://账号:密码@localhost:27017"))
collection := client.Database("数据库名称").Collection("集合名称")
one, _ := collection.DeleteOne(ctx, bson.M{"name": "Getchar"})
fmt.Println(one)