小编hen*_*ini的帖子

带有Docker的“服务器选择超时错误” MongoDB Go驱动程序

我正在使用MongoDB和Docker开发一个非常基本的(我认为)入门程序。在我们开始在工作中使用它们之前,先尝试弄清楚它们。我将MongoDB运行在D​​ocker容器中,仅使用本地主机,使用官方Docker映像。运行正常,我可以通过MongoDB Compass连接到它并修改数据库。

我的下一个任务是构建一个单独的Docker容器,该容器能够读取和写入数据库。我正在为此使用MongoDB-Go-Driver(https://godoc.org/github.com/mongodb/mongo-go-driver/mongo),因为mgo不再跟上。

这是我的代码,我只是按照在线上的众多教程进行简单连接,然后对数据库执行ping操作以确保连接性。

client, err := mongo.Connect("mongodb://localhost:27017")

if err != nil {
    log.Fatal("error ", err)
}

// Check the connection
err = client.Ping(context.TODO(), nil)

if err != nil {
    log.Fatal("error2 ", err)
}

fmt.Println("Connected to MongoDB!")
Run Code Online (Sandbox Code Playgroud)

使用以下命令对数据库执行任何操作(Find,FindOne,Ping等)时总是失败 error2 server selection timeout

这是我正在运行的docker-compose文件。

version: "3"

services:
  datastore:
    image: mongo
    ports: 
      - "27017:27017"
    networks: 
      - maccaptionNet
    volumes: 
      - .:/go/src/maccaption_microservice/dbdata
  jobservice:
    image: jobservicemaccaption:1.0
    networks:
      - maccaptionNet
    depends_on:
      - "datastore"


networks: 
  maccaptionNet:
    driver: bridge
Run Code Online (Sandbox Code Playgroud)

我是MongoDB的新手,经过数小时的研究,这方面没有任何进展。我已经阅读了https://docs.mongodb.com/manual/core/read-preference-mechanics/ https://docs.mongodb.com/manual/replication/

有人可以为此指出正确的方向吗?在这个特定问题上,我找不到很多东西。

谢谢!

go mongodb docker

5
推荐指数
1
解决办法
4758
查看次数

打印 mongoDB 集合 Golang 中的所有记录

我有一个 MongoDB 集合collection := db.Collection("JobBacklog"),我试图将其打印到控制台中。DB 位于 Docker 容器中,并使用 Go 编写的脚本对其进行控制。

从我能够从 mongo-go-driver https://godoc.org/github.com/mongodb/mongo-go-driver/mongo 中找到的, 有一种方法可以做到这一点,但我的代码document is nil在我知道不是。

这是我用来尝试遍历名为的集合的代码 JobBacklog

cur, err := collection.Find(context.Background(), nil)
        if err != nil {
            log.Fatal(err)
        }
        defer cur.Close(context.Background())
        for cur.Next(context.Background()) {
            raw, err := cur.DecodeBytes()
            if err != nil {
                log.Fatal(err)
            }
            //print element data from collection
            fmt.Println("Element", raw, x)
        }
        if err := cur.Err(); err != nil {
            log.Fatal(err)
        }
Run Code Online (Sandbox Code Playgroud)

我希望它打印出集合的内容,这些内容是:

_id:5c2d34e36657ba3238374f9a
UID:"ALDK"
PROFILE:"B"
STATUS:"PENDING"
DEVICE:"2.2.2.2"
Run Code Online (Sandbox Code Playgroud)

这是 JobBacklog DB …

go mongodb

3
推荐指数
1
解决办法
2400
查看次数

标签 统计

go ×2

mongodb ×2

docker ×1