使用 docker 方式測試 Mongo DB

docker pull mongo

建立一個 docker-compose.yml,使用 docker-compose 的方式測試

cd /Users/daniel/mongo-docker
touch docker-compose.yml

docker-compose.yml 內容(/Users/daniel/mongo-docker) :
設定一個 user 和 password.
This user is created in the admin authentication database and given the role of root.

# Use root/example as user/password credentials
version: '3.1'

services:

  mongo:
    image: mongo
    restart: always
    ports:
      - 27017:27017
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: 123456
    volumes:
      - /Users/daniel/mongo-docker/data


  mongo-express:
    image: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: 123456

執行 docker-compose up

docker-compose up

Mongo Express 網址 (http://localhost:8081/)

mongo-day2_1.jpg

docker exec -it mongo-docker_mongo_1 bash

連進 mongo shell

mongo --host 127.0.0.1:27017 -u root -p 123456 --authenticationDatabase admin

下載 gopkg.in/mgo.v2 套件

go get gopkg.in/mgo.v2

go get 一開始不行,因為忘記 source

source ~/.bash_profile
daniel@Danielde-MBP > go get gopkg.in/mgo.v2

使用 golang 新增及查詢 Mongo

package main

import (
  "fmt"
  "log"

  "gopkg.in/mgo.v2"
  "gopkg.in/mgo.v2/bson"
)

type User struct {
  Name string "bson:`name`"
  Age  int    "bson:`age`"
}

func main() {
  var mydb = getDB()
  mydb.Login("root", "123456")
  c := mydb.C("student")
  err := c.Insert(&User{Name: "Daniel", Age: 30})
  if err != nil {
    panic(err)
  }
  fmt.Println(err) // <nil>

  result := User{}
  err = c.Find(bson.M{"name": "Daniel"}).One(&result)
  if err != nil {
    log.Fatal(err)
  }

  fmt.Println("Age:", result.Age) // Age: 30
}

func getDB() *mgo.Database {
  session, err := mgo.Dial("127.0.0.1:27017")
  if err != nil {
    panic(err)
  }

  session.SetMode(mgo.Monotonic, true)
  db := session.DB("admin") //root user is created in the admin authentication database and given the role of root.
  return db
}

一些 mongo 的查詢指令 :

> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
test    0.000GB
> db.collection.count()
0
> show collections
student
> db.student.find()
{ "_id" : ObjectId("5bbcd3c3b082c29547bc95c9"), "name" : "Daniel", "age" : 30 }

使用 admin db 查詢 miRootUser 的資訊

cfg_dmp_people:PRIMARY> use admin
switched to db admin

cfg_dmp_people:PRIMARY> db.getUser("miRootUser")
{
  "_id" : "admin.miRootUser",
  "user" : "miRootUser",
  "db" : "admin",
  "roles" : [
    {
      "role" : "root",
      "db" : "admin"
    }
  ]
}

db.grantRolesToUser(
    "miRootUser",
   [ "readWrite" , { role: "root", db: "mi3" } ],
   { w: "majority" , wtimeout: 4000 }
)

查看 People 這 Collection 的資料以及筆數 :

db.getCollection('People').find({})
db.getCollection('People').count()

參考資料
mongo docker