/
mongo.go
41 lines (35 loc) 路 1.01 KB
/
mongo.go
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
package mongo
import (
"context"
"fmt"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.mongodb.org/mongo-driver/mongo/readconcern"
"go.mongodb.org/mongo-driver/mongo/readpref"
"go.mongodb.org/mongo-driver/mongo/writeconcern"
"time"
)
func NewConn(ctx context.Context, service string, url string) (*mongo.Database, error) {
ctx, cancel := context.WithTimeout(ctx, 10*time.Second)
defer cancel()
conn, err := mongo.Connect(ctx, options.Client().
SetWriteConcern(writeconcern.New(
writeconcern.WMajority(),
writeconcern.J(true),
)).
SetReadConcern(readconcern.Majority()).
SetReadPreference(readpref.SecondaryPreferred()).
ApplyURI(url))
if err != nil {
return nil, fmt.Errorf("mongo.Connect: %w", err)
}
err = conn.Ping(ctx, nil)
if err != nil {
return nil, fmt.Errorf("conn.Ping: %w", err)
}
return conn.Database("vahter_robot_" + service), nil
}
type Doc struct {
ID primitive.ObjectID `bson:"_id,omitempty"`
}