使用GO语言连接数据库Ubuntu虚拟机的docker的MongoDB数据库,Navicat 连接MongoDB,docker 拉取Mongodb镜像

首先如何从docker 拉取Mongodb ?  

docker 镜像地址  docker 镜像获取地址  https://hub-stage.docker.com/    搜索mongo

复制命令,到Ubuntu 里面的docker   比如 :docker pull mongo:latest    记得先sudo su  拥有根权限

下载完了之后:

分别输入

mkdir -p /home/bigdata/mongodb_bigdata/data
mkdir -p /home/bigdata/mongodb_bigdata/conf
mkdir -p /home/bigdata/mongodb_bigdata/logs


将docker容器挂载的宿主机目录与容器内部的的路径进行映射,相当于对容器的数据做了一个backup。容器销毁时,可以通过宿主机目录对容器的数据进行恢复。

然后:

docker run -dit --name mongodb -p 27017:27017 \                     /home/bigdata/mongodb_bigdata/data:/data/db \ -v /home/bigdata/mongodb_bigdata/conf:/data/configdb \ -v /home/bigdata/mongodb_bigdata/logs:/data/log/ \ --restart always -d mongo 

//--name 起一个别名 mongodb 

宿主机上可以通过访问 27017 端口来与容器内的 MongoDB 服务

分别输入:

命令:docker exec -ti mongodb /bin/bash
命令:mongosh

出现了下面的信息即可登录成功:

use admin                                                                                              //切换到 admin 数据库!!!
db.createUser({user:"root",pwd:"password",roles:[{role:'root',db:'admin'}]})    //创建root 用户的密码为password  享有最高权限    只要外边一连接就从admin 数据库中检查是否存在名为 root 的用户以及其密码是否正确

ok  完成了  你也可以创建别的数据库和表  

如何用Go连接MongoDB??

自己的Windows 物理机上面写Go程序:

package main

import (
	"context"
	"fmt"
	"go.mongodb.org/mongo-driver/bson"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"
	"log"
	"time"
)

type User struct {
	Name  string `json:"name"`
	Email string `json:"email"`
	Age   int    `bson:"Agg"`
}

// ... 上面User结构体定义 ...

func main() {
	// 连接MongoDB
	clientOptions := options.Client().ApplyURI("mongodb://root:password@192.168.6.117:27017/?tls=false&authSource=admin")
	//
	client, err := mongo.Connect(context.Background(), clientOptions)
	if err != nil {
		log.Fatal(err)
	}
	defer func() {
		if err = client.Disconnect(context.Background()); err != nil {
			log.Fatal(err)
		}
	}()

	// 解析JSON字符串到User结构体(假设已经完成)
	user := User{Name: "Alice", Email: "alice@example.com", Age: 22}

	// 选择数据库和集合
	collection := client.Database("test1").Collection("users")

	// 插入文档
	insertResult, err := collection.InsertOne(context.TODO(), user)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("Inserted ID:", insertResult.InsertedID)

	// 插入文档
	doc := bson.D{{"age", 30}, {"name", "Alice2"}, {"createdAt", time.Now()}}
	insertResult, err = collection.InsertOne(context.TODO(), doc)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("Inserted ID:", insertResult.InsertedID)

	// 更新文档
	filter := bson.D{{"name", "Alice1"}}
	update := bson.D{{"$set", bson.D{{"age", 31}}}}
	updateResult, err := collection.UpdateOne(context.TODO(), filter, update)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("Modified Count:", updateResult.ModifiedCount)

	// 删除文档
	filter = bson.D{{"age", 22}}
	deleteResult, err := collection.DeleteOne(context.TODO(), filter)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("Deleted Count:", deleteResult.DeletedCount)

	// 查找单个文档
	var singleResult bson.M
	err = collection.FindOne(context.TODO(), bson.D{}).Decode(&singleResult)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println("Single Document:", singleResult)

	// 查找所有文档
	cursor, err := collection.Find(context.TODO(), bson.D{})
	if err != nil {
		log.Fatal(err)
	}
	defer cursor.Close(context.TODO())

	for cursor.Next(context.TODO()) {
		var result bson.M
		err := cursor.Decode(&result)
		if err != nil {
			log.Fatal(err)
		}
		fmt.Println("Document:", result)
	}

	// 过滤查找
	filteredCursor, err := collection.Find(context.TODO(), bson.D{{"age", bson.D{{"$gt", 31}}}})
	if err != nil {
		log.Fatal(err)
	}
	defer filteredCursor.Close(context.TODO())

	for filteredCursor.Next(context.TODO()) {
		var filteredDoc bson.M
		err := filteredCursor.Decode(&filteredDoc)
		if err != nil {
			log.Fatal(err)
		}
		fmt.Println("Filtered Document:", filteredDoc)
	}
}
参考来自这个博主的文章
没有包就在终端里面go get
 go get go.mongodb.org/mongo-driver/mongo

分析代码:
clientOptions := options.Client().ApplyURI("mongodb://root:password@192.168.6.117:27017/?tls=false&authSource=admin")      

// 192.168.6.117 是Ubuntu虚拟机的ip地址(输入 ifconfig),首先你先保证 两边都能Ping 通!!!!!

//root:password 前边设置过了

//  authSource=admin 从admin 数据库里面查找用户名密码是否正确

运行Go代码:

可以连接成功,也可以插入数据

查看数据库,成功插入数据

可以通过Navicat 连接 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值