mongo day 2 (docker mongo)
使用 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/)
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