踩坑日志:dokcer安装部署、配置、go程序链接、Mongo

本文介绍了如何通过Docker来拉取、启动MongoDB容器,并创建用户进行权限管理。接着展示了用Go语言编写程序连接MongoDB的示例,包括配置数据库连接参数和创建数据的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、拉去docker镜像:

docker pull mongo 

2、启动容器

docker run -itd --name mymongo -p 27017:27017 mongo --auth

3、进入到容器中

docker exec -it mymongo mongo admin

4、创建一个mongo的用户(用户名,密码自己设置)

db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});

5、测试:使用刚刚创建的用户登陆

db.auth('admin', '123456')

6、使用程序链接mongo(我是使用go,其他语言去找一下相对应地第三方包,大体意思相近)

package main

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

type MongoConf struct {
	Host     string `toml:"host"`     // ip
	Port     int    `toml:"port"`     // 端口
	Database string `toml:"database"` // 数据库名称
	Username string `toml:"username"` // 用户名
	Password string `toml:"password"` // 密码

	MaxPoolSize    uint64 `toml:"maxPoolSize"`    // 最大连接数
	MinPoolSize    uint64 `toml:"minPoolSize"`    // 最小连接数
	ConnectTimeout int    `toml:"connectTimeout"` // 连接超时时间
}

var database *mongo.Database

// 封装一下
func Instance() *mongo.Database {
	return database
}

func main() {
	t := MongoConf{
		Host: "127.0.0.1",
		Port: 27017,
		Database:"demo",
		Username:"admin",
		Password: "123456",

		MaxPoolSize: 100,
		MinPoolSize: 20,
		ConnectTimeout: 100,
	}

	_, err := New(&t)
	fmt.Println("==>>",err)
	if err == nil{
		err := Create(context.TODO(), &t)
		fmt.Println("creat err:",err)
	}
}




func New(conf *MongoConf) (client *mongo.Client, err error) {

	DSN := fmt.Sprintf("mongodb://%s:%s@%s:%d/%s?authSource=admin", conf.Username, url.PathEscape(conf.Password), conf.Host, conf.Port, conf.Database)

	option := options.Client().ApplyURI(DSN)

	option.SetMaxPoolSize(conf.MaxPoolSize)
	option.SetMinPoolSize(conf.MinPoolSize)
	option.SetConnectTimeout(time.Duration(conf.ConnectTimeout) * time.Millisecond)

	// 建立连接
	if client, err = mongo.NewClient(option); err != nil {
		return
	}

	// 尝试连接
	if err = client.Connect(context.TODO()); err != nil {
		return
	}

	// 确认连接正常建立
	if err = client.Ping(context.TODO(), nil); err != nil {
		return
	}

	// 赋值全局单例
	database = client.Database(conf.Database)

	return client, nil
}




func Create(ctx context.Context, doc *MongoConf) (err error) {
	collection := database.Collection("hello")
	if _, err = collection.InsertOne(ctx, doc); err != nil {
		fmt.Println(err)
		return
	}
	return

	/*
	filter := bson.M{"d_id": dictId,"d_deleted":0}
		if err = collection.FindOne(ctx, filter).Decode(&dictInfo); err != nil {


	filter := bson.M{"d_hash": bson.M{"$in": dictHashs}}
		cur, err := collection.Find(ctx, filter)
		if err != nil {
			cc_log.Error(err)
			return
		}
		dictList = make([]*cc_dict_model.CCDictModel, 0)
		if err = cur.All(ctx, &dictList); err != nil {


		filter := bson.M{"d_id": doc.Id}
		value := bson.M{"$set": doc}
		if res, err = collection.UpdateOne(ctx, filter, value); err != nil {



	filter := bson.M{"d_deleted": 0}
		findOptions := options.Find()
		findOptions.SetSkip(skip)
		findOptions.SetLimit(limit)
		findOptions.SetSort(bson.D{{"d_createtime", -1}})
		cur, err := collection.Find(ctx, filter, findOptions)



	*/
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值