Skip to content

Commit b60afb1

Browse files
committed
Initial README.md
0 parents  commit b60afb1

File tree

9 files changed

+460
-0
lines changed

9 files changed

+460
-0
lines changed

Installation.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
## Linux
2+
3+
- ### Arch Linux
4+
5+
```
6+
$ yay -S mongodb-bin
7+
```
8+
9+
## Windows
10+
11+
test

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2020 Kevin Abrar Khansa
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 246 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,246 @@
1+
# Memulai belajar MongoDB
2+
3+
## Petunjuk
4+
5+
- ## Instalasi
6+
7+
- ### [Linux](Installation.md#linux)
8+
- ### [Windows](Installation.md#windows)
9+
10+
- ## Intregrasi MongoDB terhadap Bahasa Pemograman
11+
12+
- ### [Golang](go_example/README.md)
13+
14+
- #### [CRUD Golang](contoh/crud)
15+
16+
- ## DDL (Data Definition Language)
17+
18+
- [x] [Collection](#collection)
19+
20+
## collection
21+
22+
collection merupakan tahap awal dalam pembuatan sebuah database, caranya hanya dengan perintah
23+
24+
```
25+
use <namaDatabase>
26+
```
27+
28+
> Gunakan camelCase, setiap akhir perintah boleh menggunakan semicolon ataupun tidak
29+
30+
## getCollection
31+
32+
getCollection merupakan sebuah sub collection yaitu sebuah table jika anda pernah menggunakan SQL
33+
34+
```
35+
db.getCollection(<namaCollection>)
36+
```
37+
38+
contoh disini kita akan membuat collection bernama `buku`
39+
40+
```
41+
db.getCollection('buku')
42+
```
43+
44+
> note: pastikan anda sudah `use <namaDatabase>` sebelumnya agar bisa membuat seperti diatas
45+
46+
## insertOne
47+
48+
Mengisi sebuah data terhada collection. Disini jika anda familiar menggunakan JavaScript sudah dipastikan anda akan terbiasa melakukan ini di MongoDB sudah berasa seperti dirumah sendiri ^^
49+
50+
```
51+
db.<namaCollection>.insertOne(<data>)
52+
```
53+
54+
`insertOne` hanya akan membuat satu data.
55+
56+
```
57+
db.buku.insertOne({
58+
id: 1,
59+
nama: "Belajar MongoDB maha asyieque"
60+
})
61+
```
62+
63+
## insertMany
64+
65+
Mengisi sebuah data dengan banyak. like JSON
66+
67+
```
68+
db.buku.insertMany([
69+
{
70+
id: 1,
71+
nama: "Belajar sesuatu yang baru"
72+
},
73+
{
74+
id: 2,
75+
nama: "Belajar sesuatu yang lama"
76+
},
77+
...data seterusnya
78+
])
79+
```
80+
81+
## updateOne
82+
83+
updateOne merupakan featur untuk merubah dan memanipulasi sebuah ini collection
84+
85+
saya asumsikan mempunyai data seperti ini
86+
87+
```
88+
{ id: 1, nama: "Belajar MongoDB Pertama" },
89+
{ id: 2, nama: "Belajar MongoDB Kedua" },
90+
{ id: 3, nama: "Belajar MongoDB Ketiga" }
91+
```
92+
93+
pengaplikasian
94+
95+
```
96+
db.<collection>.updateOne(<query>, <update>, [option])
97+
```
98+
99+
```
100+
db.buku.updateOne({
101+
nama: /Ketiga/
102+
},
103+
{ $set: {
104+
nama: "Belajar MongoDB Keempat"
105+
}
106+
})
107+
```
108+
109+
## updateMany
110+
111+
updateMany merupakan cara mengupdate sebuah data dengan jumlah yang multiple sekaligus dimana data yang sama akan diupdate semua
112+
113+
saya asumsikan data seperti ini
114+
115+
```
116+
{ id: 1, nama: "Belajar MongoDB Pertama" },
117+
{ id: 2, nama: "Belajar MongoDB Kedua" },
118+
{ id: 3, nama: "Belajar MongoDB Ketiga" }
119+
```
120+
121+
contoh
122+
123+
```
124+
db.buku.updateMany({
125+
nama: /Belajar/
126+
},
127+
{
128+
$set: {
129+
nama: "Semua kata Belajar akan terupdate"
130+
}
131+
})
132+
```
133+
134+
hasil
135+
136+
```
137+
{ id: 1, nama: "Semua kata Belajar akan terupdate" },
138+
{ id: 2, nama: "Semua kata Belajar akan terupdate" },
139+
{ id: 3, nama: "Semua kata Belajar akan terupdate" }
140+
```
141+
142+
## deleteOne
143+
144+
Menghapus single isi data collection
145+
146+
```
147+
db.<collection>.deleteOne(<query>)
148+
```
149+
150+
contoh
151+
152+
```
153+
db.buku.deleteOne({
154+
nama: /Belajar/
155+
})
156+
```
157+
158+
> akan menghapus karakter yang mirip dan hanya menghapus data yang pertama ia temui saja
159+
160+
## deleteMany
161+
162+
## find
163+
164+
Mencari sebuah data di collection dengan memanfaatkan fieldnya. Jika di SQL itu mirip `WHERE`
165+
166+
```
167+
db.<collection>.find([keyword])
168+
```
169+
170+
> Jika tidak menggunakan keyword maka data akan ditampilkan semua
171+
172+
contoh disini saya asumsikan mempunyai data seperti ini ketika menuliskan db.buku.find()
173+
174+
```
175+
{ "_id" : ObjectId("5ef0edc9794837e7c46cd8df"), "id" : 1, "nama" : "Fundamental MongoDB pertama" }
176+
{ "_id" : ObjectId("5ef0edc9794837e7c46cd666"), "id" : 2, "nama" : "Fundamental MongoDB kedua" }
177+
```
178+
179+
jika ingin mencari id ke 2 maka
180+
181+
```
182+
db.buku.find({
183+
id: 2
184+
})
185+
```
186+
187+
atau
188+
189+
```
190+
db.buku.find({
191+
nama : "Fundamental MongoDB pertama"
192+
})
193+
```
194+
195+
namun setelah diperhatikan sangat lah susah jika
196+
ingin mencari keyword `nama` lalu isinya panjang dan
197+
harus sama maka karena itu kita butuh menggunakan
198+
Regular Expression jika di SQL itu seperti LIKE. Cukup mudah hanya perlu menambahkan / / seperti ini
199+
akan mencari datanya.
200+
201+
```
202+
db.buku.find({
203+
nama : /Mongo/
204+
})
205+
```
206+
207+
akan tampil semua karakter yang ada Mongo.
208+
209+
## aggregate
210+
211+
Aggregasi merupakan cara kita untuk melakukan operasi lebih dari satu dalam satu query, seperti find, sum dan semacamnya.
212+
Dalam agregasi, setiap operasi dalam agregasi merupakan stage, dimana setiap hasil operasi merupakan stage yang akan diteruskan ke operasi selanjutnya (pipelining).
213+
```
214+
db.book.aggregate([
215+
{ "$match": {"nama": "Laravel is Great"}},
216+
{ "$lookup":
217+
{
218+
from: "harga",
219+
localField: "id",
220+
foreignField: "id",
221+
as: "result"
222+
}
223+
},
224+
{"$project":
225+
{
226+
"nama": "$nama",
227+
"harga": "$result.harga"
228+
}
229+
}
230+
])
231+
```
232+
233+
#### Alur pipeline data
234+
Operator $match sama dengan db.find() / SELECT di SQL (stage 1)
235+
236+
| | Hasil $match diteruskan ke $lookup sebagai input stage 2 ( stage 1 piping ke stage 2)
237+
238+
v v
239+
240+
Operator $lookup sama dengan LEFT-JOIN di SQL (stage 2)
241+
242+
| | Hasil $lookup diterukasan ke $project sebagai input stage 3 (stage 2 piping ke stage 3)
243+
244+
v v
245+
246+
Operator $project sama dengan PROJECT di SQL (stage 3) <-- hasil akhir

contoh/crud/config/mongo.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package config
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"go.mongodb.org/mongo-driver/mongo"
7+
)
8+
9+
var clientInstance *mongo.Client
10+
var dbInstance *mongo.Database
11+
12+
func InitMongo(){
13+
clientInstance, err := mongo.Connect(ctx, options.Client().ApplyURI(os.Getenv("MONGODB_URL")))
14+
// os.Getenv("MONGODB_URL") bisa diganti string URL
15+
if err != nil {
16+
panic(err)
17+
}
18+
19+
if err = clientInstance.Ping(context.TODO(), nil); err != nil {
20+
panic(err)
21+
}
22+
23+
fmt.Println("[*] Driver terhubung")
24+
}
25+
26+
func selectDb(dbName string){
27+
dbInstance = clientInstance.Database(dbName)
28+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package controller
2+
3+
import (
4+
"crud-mongo/config"
5+
"crud-mongo/model"
6+
)
7+

contoh/crud/go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module crud-mongo
2+
3+
go 1.14

contoh/crud/main.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"crud-mongo/config"
7+
"crud-mongo/controller"
8+
"crud-mongo/model"
9+
)
10+
11+
func main(){
12+
config.InitMongo()
13+
config.selectDb(os.Getenv("DB_NAME"))
14+
}

contoh/crud/model/user.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package model
2+
3+
import (
4+
"crud-mongo/config"
5+
"context"
6+
)
7+
8+
type User struct {
9+
NamaDepan string
10+
NamaBelakang string
11+
NamaPengguna string
12+
}
13+
14+
15+
/*
16+
17+
Struct ini akan dikonversi dari struct
18+
menjadi BSON.
19+
20+
Representasi dalam BSON
21+
22+
{
23+
"NamaDepan": "",
24+
"NamaBelakang": "",
25+
"NamaPengguna": ""
26+
}
27+
*/
28+
29+
func(u User) Insert()(*InsertOneResult,error){
30+
return config.dbInstance.collection("users").InsertOne(context.TODO(),u)
31+
// config.dbInstance dijabarkan untuk mudah dikenali
32+
// gunakan abstraksi lanjut untuk DX yang lebih baik
33+
}
34+
35+
func(u User) Read(namaPengguna string)([]*User,error){
36+
hasil,err := config.dbInstance.collection("users").Find(
37+
context.TODO(),
38+
bson.D{{"NamaPengguna": namaPengguna}},
39+
)
40+
if err != nil {
41+
return nil,err
42+
}
43+
44+
var hasil []*User
45+
46+
for _,elemen := range hasil{
47+
user := new(User)
48+
err = elemen.Decode(&user)
49+
if err != nil{
50+
return nil,err
51+
}
52+
hasil = append(hasil,&user)
53+
}
54+
return hasil,nil
55+
}
56+
57+
// WIP

0 commit comments

Comments
 (0)