4.5 调用MongoDB

4.5.1 简介

store/mongox 包是对 go.mongodb.org/mongo-driver/mongo 进行二次封装。

4.5.2 配置规范

配置说明4.5 调用MongoDB - 图1 (opens new window)

4.5.3 用法

访问mongo示例4.5 调用MongoDB - 图2 (opens new window)

  1. // run: go run main.go --config=config.toml
  2. package main
  3. import (
  4. "context"
  5. "fmt"
  6. "log"
  7. "time"
  8. "github.com/douyu/jupiter"
  9. "github.com/douyu/jupiter/pkg/store/mongox"
  10. "github.com/douyu/jupiter/pkg/xlog"
  11. "go.mongodb.org/mongo-driver/mongo"
  12. "gopkg.in/mgo.v2/bson"
  13. )
  14. // run: go run main.go -config=config.toml
  15. type Engine struct {
  16. jupiter.Application
  17. }
  18. func NewEngine() *Engine {
  19. eng := &Engine{}
  20. if err := eng.Startup(
  21. eng.exampleMongo,
  22. ); err != nil {
  23. xlog.Panic("startup", xlog.Any("err", err))
  24. }
  25. return eng
  26. }
  27. func main() {
  28. app := NewEngine()
  29. if err := app.Run(); err != nil {
  30. panic(err)
  31. }
  32. }
  33. func (eng *Engine) exampleMongo() (err error) {
  34. client := mongox.StdConfig("test").Build()
  35. write(client)
  36. read(client)
  37. return
  38. }
  39. func write(client *mongo.Client) {
  40. collection := client.Database("test").Collection("test")
  41. ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
  42. defer cancel()
  43. _, err := collection.InsertOne(ctx, bson.M{"rid": 888, "dateline": time.Now().Unix()})
  44. if err != nil {
  45. panic(err)
  46. }
  47. }
  48. func read(client *mongo.Client) {
  49. collection := client.Database("test").Collection("test")
  50. ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
  51. defer cancel()
  52. cur, err := collection.Find(ctx, bson.M{"rid": 888})
  53. if err != nil {
  54. log.Fatal(err)
  55. }
  56. defer cur.Close(ctx)
  57. for cur.Next(ctx) {
  58. var result bson.M
  59. err := cur.Decode(&result)
  60. if err != nil {
  61. xlog.Fatal("exampleMongo", xlog.Any("err", err.Error()))
  62. }
  63. fmt.Println("result...", result)
  64. // do something with result....
  65. }
  66. }

执行 go run main.go —config=config.toml,可以看到如下图结果 image