我正在使用MongoDB和Docker开发一个非常基本的(我认为)入门程序。在我们开始在工作中使用它们之前,先尝试弄清楚它们。我将MongoDB运行在Docker容器中,仅使用本地主机,使用官方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/
有人可以为此指出正确的方向吗?在这个特定问题上,我找不到很多东西。
谢谢!
我有一个 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 …