GUI (Grafiksel Kullanıcı Arayüzü)
MongoDB
Twitter @YusihCano
MongoDB 2009 yılında geliştirilmiş açık kaynak kodlu bir NoSQL veritabanıdır. Şimdi Go ile MongoDB veritabanını kullanmak için mongo-driver paketini indirelim.
go get go.mongodb.org/mongo-driver/mongo
Kodu sürekli tekrardan yapıştırmamak için import edilecek tüm kütüphaneler burada :
1
package main
2
3
import (
4
"context"
5
"log"
6
"time"
7
8
"go.mongodb.org/mongo-driver/bson"
9
"go.mongodb.org/mongo-driver/bson/primitive"
10
"go.mongodb.org/mongo-driver/mongo"
11
"go.mongodb.org/mongo-driver/mongo/options"
12
)
Copied!
Şimdi de database ile bağlantıyı sağlayalım. Eğer database adresini bilmiyorsanız mongo konsolunuzun nereye bağlandığına bakarak database adresini bulabilirsiniz.
1
databaseURL := "mongodb://127.0.0.1:27017"
2
ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
3
client, err := mongo.Connect(ctx, options.Client().ApplyURI(databaseURL))
4
if err != nil {
5
log.Fatal("Hata : " + err.Error())
6
}
7
kisiler := client.Database("test").Collection("kisiler")
Copied!
Bu kısım main fonksiyonununun başlangıcı. Kısaca yapılan ise ilk satırda database adresini verdik. Ardından 10 saniye timeout'u olan bir context açtık. Context ve database adresini kullanarak bağlantımızı gerçekleştirdik.Son satırda da istedigimiz veritabanı ve collection'u çektik. Bundan sonra isim adında bir struct oluşturalım. Kişinin ismini ve yaşını tutsun.
1
type Kisi struct {
2
ID primitive.ObjectID `bson:"_id,omitempty" json:"id,omitempty"`
3
Isim string `bson:"isim,omitempty" json:"isim,omitempty"`
4
Yas int `bson:"yas,omitempty"json:"yas,omitempty"`
5
}
Copied!
Şimdi de bir kişi oluşturup database'e ekleyelim.
1
birisi := Kisi{
2
Isim: "Ahmet",
3
Yas: 42,
4
}
5
res, err := kisiler.InsertOne(context.TODO(), birisi)
6
if err != nil {
7
log.Fatal("Hata : " + err.Error())
8
}
9
10
id := res.InsertedID
11
fmt.Println(id)
Copied!
Kişi oluşturma ve ekleme işlemlerinden sonra eklenen verinin id'sini de yazdırdık. MongoDB Compass ya da konsol üzerinden db.kisiler.find() yaparak eklenen veriyi görebiliriz. Şimdi de veri okuma yapalım. Tüm verileri almak için :
1
ctx, _ = context.WithTimeout(context.Background(), 30*time.Second)
2
cur, err := kisiler.Find(ctx, bson.D{})
3
if err != nil {
4
log.Fatal("Hata : " + err.Error())
5
}
6
defer cur.Close(ctx)
7
var list []Kisi
8
for cur.Next(ctx) {
9
var result Kisi
10
err := cur.Decode(&result)
11
if err != nil {
12
log.Fatal("Hata : " + err.Error())
13
}
14
list = append(list, result)
15
}
16
if err := cur.Err(); err != nil {
17
log.Fatal("Hata : " + err.Error())
18
}
19
fmt.Println(list)
Copied!
Şimdi de her hangi bir özelliğe göre arama yapalım.
1
var result Kisi
2
ctx, _ = context.WithTimeout(context.Background(), 5*time.Second)
3
err = kisiler.FindOne(ctx, bson.M{"yas": 42}).Decode(&result)
4
if err != nil {
5
log.Fatal("Hata : " + err.Error())
6
}
7
out, err := json.Marshal(&result)
8
if err != nil {
9
log.Fatal("Hata : " + err.Error())
10
}
11
fmt.Println(string(out))
Copied!
Silme işlemi yapalım.
1
ctx, _ = context.WithTimeout(context.Background(), 5*time.Second) // Context for Delete
2
_, err = kisiler.DeleteOne(ctx, bson.D{{"yas", 39}}) // Delete User
3
if err != nil {
4
log.Fatal("Hata : " + err.Error())
5
}
Copied!
İsterseniz başka bir değer üzerinden de silme işlemi yapabilirsiniz. Ben direk istenen veriyi silmek için id kullanmanızı tavsiye ediyorum. Şimdi de Update ile temel fonksiyonları bitirelim.
1
degisecek := Kisi{
2
Isim: "Kemal",
3
Yas: 39,
4
}
5
yeni := Kisi{
6
Isim: "Kemal",
7
Yas: 100,
8
}
9
var filtre bson.M
10
bytes, err := bson.Marshal(degisecek)
11
if err != nil {
12
log.Fatal("Hata : " + err.Error())
13
}
14
bson.Unmarshal(bytes, &filtre)
15
var usr bson.M
16
bytes, err = bson.Marshal(yeni)
17
if err != nil {
18
log.Fatal("Hata : " + err.Error())
19
}
20
bson.Unmarshal(bytes, &usr)
21
update := bson.D{
22
{"$set", usr},
23
}
24
ctx, _ = context.WithTimeout(context.Background(), 5*time.Second)
25
_, err = kisiler.UpdateOne(ctx, filtre, update)
26
if err != nil {
27
log.Fatal("Hata : " + err.Error())
28
}
Copied!
Last modified 1yr ago
Copy link