Pratik Bilgiler ve Komutlar: MongoDB

Merhabalar pratik bilgiler, pratik komutlar yazı dizimizin bu bölümü tamamen mongodb ile ilgili olacak.

  1. Python ile MongoDB’ye nasıl bağlanırım?
  2. MongoDB’de bulunan veri tabanlarını nasıl listelerim?
  3. MongoDB’de veri tabanı yaratmak veya seçmek
  4. MongoDB’de bir veri tabanındaki collection isimlerini listelemek
  5. MongoDB veritabanında yeni bir collection yaratmak
  6. MondoDB collection içinde kaç document (kayıt) var?
  7. MongoDB’de bir collection içine bir document nasıl eklenir?
  8. MongoDB collection’dan python pandas dataframe oluşturmak
  9. MongoDB csv dosyası yüklemek – Import csv to MongoDB – Load csv data into MongoDB
  10. MongoDB kullanıcı bilgilerini nasıl görürüm? See user info
  11. MongoDB kullanıcıya veri tabanında yetki ve rol ataması yapmak
  12. MongoDB bir kullanıcıya rol atamak yetki vermek – user roles
  13. MongoDB bir kullanıcının kendi şifresini değiştirmesi için gerekli yetkileri vermek
  14. MongoDB rol bazlı erişim kontrolü (RBAC) için kullanılan rol çeşitleri nelerdir?
  15. MongoDB veri tabanını silmek. dropDatabase()

Bu yazımızda MongoDB ile ilgili pratik bilgileri paylaşıyor olacağız.

1. Python ile MongoDB’ye nasıl bağlanırım?

Çok basit. pymongo kütüphanesini pip ile kurduktan sonra python shell veya jupyter üzerinde:

myclient = pymongo.MongoClient("mongodb://localhost:27017")

2. Python ile MongoDB’de bulunan veri tabanlarını nasıl listelerim?

print(myclient.list_database_names())
['admin', 'compare', 'config', 'local']

3. Python ile MongoDB’de veri tabanı yaratmak veya seçmek

Aşağıdaki komut yoksa yeni bir veri tabanı yaratır varsa olanı seçer.

db = myclient['databasename']

4. Python ile MongoDB’de bir veri tabanındaki collection isimlerini listelemek

db.list_collection_names()

5. Python ile MongoDB veritabanında yeni bir collection yaratmak

MongoDB’de collection kavramını ilişkisel veri tabanlarındaki tablo gibi düşünebiliriz. Aşağıdaki kod varsa bir collection seçer yoksa yenisini yaratır.

customers_col = db["customers"]

6. MondoDB collection içinde kaç document (kayıt) var? Python

Nasıl collection bir tabloya benziyor ise document de bir satıra benzetilebilir. Bir tabloda kaç kayıt olduğunu merak ettiğimiz gibi bir collection içinde kaç document olduğunu da merak edebiliriz. Format: db.collection.count_documents(filter). Örnek:

db.customers.count_documents({})

7. Python ile MongoDB’de bir collection içine bir document nasıl eklenir?

Document formatı json olduğu için json formatına gitirdiğimiz bir çok bilgiyi MongoDB collection’a ekleyebiliriz. Bu operasyon ilişkisel dünyadaki insert gibidir.

document_of_a_cuneyt = {"name":"Cüneyt ARKIN", "address":"Yeşilçam İstanbul"}

8. MongoDB collection’dan python pandas dataframe oluşturmak

import pandas as pd
x = db.customers.find()
df =  pd.DataFrame(list(x))

9. MongoDB csv dosyası yüklemek – Import csv to MongoDB – Load csv data into MongoDB

# Create a database and user

> use vbo_test
> db.createUser(
  {
    user: "vboUser",
    pwd:  passwordPrompt(),   // or cleartext password
    roles: [ { role: "readWrite", db: "vbo_test" },
             { role: "read", db: "test" } ]
  }
)


# mongoimport 
```
[root@mongodb ~]# mongoimport --host 192.168.206.154 --port 27017 \
--authenticationDatabase "vbo_test" \
-u "vboUser" \
-p Ankara06 \
--db vbo_test \
--collection vehicle_collisions \
--type csv --headerline --ignoreBlanks \
--file vehicle_collisions_nypd.csv

2021-06-14T15:27:54.544+0300    connected to: mongodb://192.168.206.154:27017/
2021-06-14T15:27:57.544+0300    [##......................] vbo_test.vehicle_collisions  8.54MB/85.4MB (10.0%)
2021-06-14T15:28:00.545+0300    [####....................] vbo_test.vehicle_collisions  17.2MB/85.4MB (20.2%)
2021-06-14T15:28:03.545+0300    [#######.................] vbo_test.vehicle_collisions  25.8MB/85.4MB (30.2%)
2021-06-14T15:28:06.544+0300    [#########...............] vbo_test.vehicle_collisions  34.5MB/85.4MB (40.4%)
2021-06-14T15:28:09.544+0300    [############............] vbo_test.vehicle_collisions  43.2MB/85.4MB (50.6%)
2021-06-14T15:28:12.545+0300    [##############..........] vbo_test.vehicle_collisions  52.1MB/85.4MB (61.0%)
2021-06-14T15:28:15.544+0300    [#################.......] vbo_test.vehicle_collisions  60.8MB/85.4MB (71.2%)
2021-06-14T15:28:18.545+0300    [###################.....] vbo_test.vehicle_collisions  68.6MB/85.4MB (80.3%)
2021-06-14T15:28:21.545+0300    [#####################...] vbo_test.vehicle_collisions  77.5MB/85.4MB (90.7%)
2021-06-14T15:28:24.248+0300    [########################] vbo_test.vehicle_collisions  85.4MB/85.4MB (100.0%)
2021-06-14T15:28:24.248+0300    477732 document(s) imported successfully. 0 document(s) failed to import.
```

10. MongoDB kullanıcı bilgilerini nasıl görürüm? See user info

> db.getUser("myUserAdmin")

11. MongoDB kullanıcıya veri tabanında yetki ve rol ataması yapmak

> use admin
switched to db admin

> db.grantRolesToUser("myUserAdmin", [{role: "readWrite", db: "vbo_test"} ] )

12. MongoDB bir kullanıcıya rol atamak yetki vermek – user roles

> db.grantRolesToUser("myUserAdmin",		
        [
           { "role" : "readWrite", "db" : "accounts" },
           { "role" : "read", "db" : "reporting" },
           { "role" : "read", "db" : "products" },
           { "role" : "read", "db" : "sales" }
        ]
    )

13. MongoDB bir kullanıcının kendi şifresini değiştirmesi için gerekli yetkileri vermek

Öncelikle userAdminAnyDatabase rolüne sahip kullanıcı ile oturum açılmalıdır mongo --host 192.168.206.154 --port 27017 -u myUserAdmin -p --authenticationDatabase 'admin'.  Sonrasında kullanıcının kendi şifresini değiştirmesini sağlayacak özgün bir rol yaratılmalıdır.

use admin
db.createRole(
   { role: "changeOwnPasswordCustomDataRole",
     privileges: [
        { 
          resource: { db: "", collection: ""},
          actions: [ "changeOwnPassword", "changeOwnCustomData" ]
        }
     ],
     roles: []
   }
)

Şimdi de bu role sahip kullanıcı yaratılmalıdır.

> use test
> db.createUser(
   {
     user:"user123",
     pwd: "strong_password_here",
     roles:[ "readWrite", { role:"changeOwnPasswordCustomDataRole", db:"admin" } ] 
   }
)

Eğer mevcut bir kullanıcıya bu yetki verilmek isteniyorsa:

> use test
> db.grantRolesToUser("user123", [ { "role" : "changeOwnPasswordCustomDataRole", "db" : "admin" } ] )

Oturum kapatılır ve yeni kullanıcı ile oturum açılır.

mongo --host 192.168.206.154 --port 27017 -u user123 --authenticationDatabase 'test' -p	

Şifre değiştirme

use test
db.updateUser(
   "user123",
   {
      pwd: "new_strong_password_here"
     
   }
)

14. MongoDB rol bazlı erişim kontrolü (RBAC) için kullanılan rol çeşitleri nelerdir?

Database User Roles
– read
– readWrite
Database Administration Roles
– dbAdmin
– dbOwner
– userAdmin
Cluster Administration Roles
– clusterAdmin
– clusterManager
– clusterMonitor
– hostManager
Backup and Restoration Roles
– backup
– restore
All-Database Roles
– readAnyDatabase
– readWriteAnyDatabase
– userAdminAnyDatabase
– dbAdminAnyDatabase
Superuser Roles
– root
Internal Role
– __system

15. MongoDB veri tabanını silmek. dropDatabase()

# mevcut veritabanları
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
test    0.000GB

# Silinecek db'yi seç
> use test
switched to db test

# test veritabanını sil
> db.dropDatabase()
{ "dropped" : "test", "ok" : 1 }

# Kalan veritabanları
> use admin
switched to db admin
MongoDB Enterprise > show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

 

Kapak: Photo by Vlad Kutepov on Unsplash 

Yazar Hakkında
Toplam 180 yazı
Erkan ŞİRİN
Erkan ŞİRİN
10 yılı aşkın süredir yurtiçi ve yurtdışında sektörde büyük veri mühendisliği, platform yönetimi ve makine öğrenmesi ile ilgili çalışmalar yürütmekte ve aynı zamanda birçok kurum ve şirkete danışmanlık ve eğitimler vermektedir. Çalışma alanları: Data ve MLOps platformları, gerçek zamanlı veri işleme, değişen veriyi yakalama (CDC) ve Lakehouse.
Yorumlar (Yorum yapılmamış)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara