Pratik Bilgiler ve Komutlar: MongoDB
Merhabalar pratik bilgiler, pratik komutlar yazı dizimizin bu bölümü tamamen mongodb ile ilgili olacak.
- Python ile MongoDB’ye nasıl bağlanırım?
- MongoDB’de bulunan veri tabanlarını nasıl listelerim?
- MongoDB’de veri tabanı yaratmak veya seçmek
- MongoDB’de bir veri tabanındaki collection isimlerini listelemek
- MongoDB veritabanında yeni bir collection yaratmak
- MondoDB collection içinde kaç document (kayıt) var?
- MongoDB’de bir collection içine bir document nasıl eklenir?
- MongoDB collection’dan python pandas dataframe oluşturmak
- MongoDB csv dosyası yüklemek – Import csv to MongoDB – Load csv data into MongoDB
- MongoDB kullanıcı bilgilerini nasıl görürüm? See user info
- MongoDB kullanıcıya veri tabanında yetki ve rol ataması yapmak
- MongoDB bir kullanıcıya rol atamak yetki vermek – user roles
- MongoDB bir kullanıcının kendi şifresini değiştirmesi için gerekli yetkileri vermek
- MongoDB rol bazlı erişim kontrolü (RBAC) için kullanılan rol çeşitleri nelerdir?
- 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