mongodb的世界觀長這樣
- Project (您可以邀請其他人參於專案)
- Cluster: 一個文件夾(可以放很多檔案)
- Database: 可以有很多檔案
- Collection1: 可想像成一個檔案
- Document: 檔案內的每一筆資料
- CollectionN
- Database N
一開始他會叫你建立cluster,
然後叫你選擇Server相關的資訊,共有三種可選
512MB storage, AWS M0 General class, Shared RAM, Shared vCPU, 500 connections max
這些設定日後都可以再更改(有一個Edit Configuration),改完之後會有一個preview,讓您對照舊方案和新方案。(您一開始選免費就是免費的,修改他預設都會幫你選一個推薦的要付費專案( 不代表您目前是付費的專案,總之看完Review Changes就會明白了)
選完之後會叫你輸入cluster的名稱(不可改)
接下來他會有以下教學,叫你完成這些事情
Database Access: 哪些人有存取那些資料庫的權限
Role 和 Specific Privileges 須至少有設定一個。(如果您設定了Specific Privileges,那麼Role就可以選擇刪除)
Network Access: 那些 public ip 有辦法訪問您的cluster
設定databases: 您可以自己建立資料或者匯入教學資料,您可以先匯入教學資料就大概知道該怎麼玩
Connect: 這是一個引導,教您如何讓mongoDB和您的程式結合在一起
選擇您的程式語言
程式語言的版本
貼上範例代碼: 以下我舉golang當作例子 (不過這其實沒什麼屁用,您接下來要看專門的document才能入手,請參考 MongoDB Drivers
import "go.mongodb.org/mongo-driver/mongo"
clientOptions := options.Client().
ApplyURI("mongodb+srv://<username>:<password>@my-mongo-cluster.jkj8c.mongodb.net/myFirstDatabase?retryWrites=true&w=majority")
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
client, err := mongo.Connect(ctx, clientOptions)
if err != nil {
log.Fatal(err)
}
這裡就是各個語言如何和MongoDB連接的參考
如果您是node.js也可以快速地看一下w3school的教學
我這邊重點放在golang
clientOptions := options.Client().ApplyURI("mongodb+srv://<username>:<password>@my-mongo-cluster.jkj8c.mongodb.net/<myFirstDatabase>?retryWrites=true&w=majority")
其中的username, password, dbName都要經過url encoding
這邊需要把以下東西經過url編碼
: / ? # [ ] @
例如 p@ssw0rd'9'!
編碼後須為
p%40ssw0rd%279%27%21
在golang之中,可以透過
import "net/url"
url.QueryEscape("p@ssw0rd'9'!")
好文章推薦
常用的library
import (
"context"
"log"
"time"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
就是JSON,只是他是BINARY的形式所以取名為BSON
import "go.mongodb.org/mongo-driver/mongo"
clientOptions := options.Client().
ApplyURI("mongodb+srv://<username>:<password>@my-mongo-cluster.jkj8c.mongodb.net/<myFirstDatabase>?retryWrites=true&w=majority")
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
client, err := mongo.Connect(ctx, clientOptions)
if err != nil {
log.Fatal(err)
}
myDB := client.Database("myDbName")
myCollection := myDB.Collection("myCollection")
myCollection.InsertOne(ctx, bson.D{ // bsonD {D指的是Document} 一般資料,同json依樣
{Key: "title", Value: "The Polyglot Developer Podcast"},
{Key: "author", Value: "Nic Raboy"},
{Key: "tags", Value: bson.A{"development", "programming", "coding"}}, // bsonA array 也就是 tags: ["development", "programming", "coding"]
})
// InsertMany 相對於 addOne,一次插入很多筆資料
episodeResult, err := episodesCollection.InsertMany(ctx, []interface{}{
bson.D{
{"podcast", podcastResult.InsertedID},
{"title", "GraphQL for API Development"},
{"description", "Learn about GraphQL from the co-creator of GraphQL, Lee Byron."},
{"duration", 25},
},
bson.D{
{"podcast", podcastResult.InsertedID},
{"title", "Progressive Web Application Development"},
{"description", "Learn about PWA development with Tara Manicsic."},
{"duration", 32},
},
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("Inserted %v documents into episode collection!\n", len(episodeResult.InsertedIDs))