-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmain.go
More file actions
76 lines (63 loc) · 1.58 KB
/
main.go
File metadata and controls
76 lines (63 loc) · 1.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package main
import (
"context"
"log"
"log/slog"
"os"
"github.com/FerretDB/FerretDB/v2/ferretdb"
"go.mongodb.org/mongo-driver/v2/bson"
"go.mongodb.org/mongo-driver/v2/mongo"
"go.mongodb.org/mongo-driver/v2/mongo/options"
)
// runExampleClient shows an example of running MongoDB client with embedded FerretDB.
func runExampleClient(uri string) {
ctx := context.Background()
client, err := mongo.Connect(options.Client().ApplyURI(uri))
if err != nil {
log.Fatal(err)
}
defer client.Disconnect(ctx)
// insert data
collection := client.Database("test").Collection("test")
if _, err = collection.InsertOne(ctx, bson.D{{"hello", "world"}}); err != nil {
log.Fatal(err)
}
// show a list of databases
databases, err := client.ListDatabaseNames(ctx, bson.D{})
if err != nil {
log.Fatal(err)
}
log.Printf("Databases: %v", databases)
// show inserted data
cursor, err := collection.Find(ctx, bson.D{})
if err != nil {
log.Fatal(err)
}
var res []bson.D
if err = cursor.All(ctx, &res); err != nil {
log.Fatal(err)
}
log.Printf("Data in test.test: %v", res)
}
func main() {
f, err := ferretdb.New(&ferretdb.Config{
PostgreSQLURL: "postgres://postgres:password@127.0.0.1:5432/postgres",
ListenAddr: "127.0.0.1:27017",
StateDir: ".",
LogLevel: slog.LevelInfo,
LogOutput: os.Stderr,
})
if err != nil {
log.Fatal(err)
}
ctx := context.Background()
done := make(chan struct{})
go func() {
f.Run(ctx)
close(done)
}()
uri := f.MongoDBURI()
log.Printf("Embedded FerretDB started, use %s to connect.", uri)
runExampleClient(uri)
<-done
}