首先如何从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 连接