giriiş
MongoDB gibi veritabanı sistemleri genellikle veritabanı sunucusuna bağlanan ve veri okuma, işleme veya yeni girdi yazma gibi işlemleri gerçekleştiren harici bir uygulama ile birlikte kullanılır. Bu gibi durumlarda, veritabanı sunucusuyla doğrudan etkileşim kurmazsınız. Veritabanında yönetim görevlerini gerçekleştirmek veya özel veritabanı sorguları çalıştırmak için doğrudan erişim gerekebilir.
İşte tam bu noktada MongoDB kabuğu devreye giriyor. MongoDB kabuğu, veritabanı sunucusuna bağlanıp komutlar çalıştırabileceğiniz etkileşimli bir konsoldur. Bu sayede yönetim görevlerini gerçekleştirebilir, verileri doğrudan okuyabilir, yazabilir veya düzenleyebilirsiniz. MongoDB kabuğu, komut satırı aracılığıyla veritabanına bağlanmanızı ve bir terminal penceresinden etkileşimli olarak çalışmanızı sağlar. Ayrıca, tekrarlayan görevleri daha kolay gerçekleştirmek için harici komut dosyalarını çalıştırmanıza da olanak tanır.
Bu eğitimde, MongoDB kabuğunu kullanarak bir MongoDB veritabanına bağlanacak ve veritabanında etkileşimli sorgulamalar yapacaksınız. Ayrıca, kabukta bulunan yerleşik yardım sistemini ve otomatik tamamlama özelliklerini de kullanacaksınız.
Ön koşullar
- Sudo ayrıcalıklarına sahip, kök olmayan normal bir kullanıcıya ve UFW ile yapılandırılmış bir güvenlik duvarına sahip bir sunucu. Bu eğitim, Ubuntu 20.04 çalıştıran bir sunucu kullanılarak doğrulanmıştır.
- Sunucunuzda MongoDB kurulu.
- MongoDB sunucu örneğiniz, kimlik doğrulamanın etkinleştirilmesi ve bir yönetici kullanıcısı oluşturulmasıyla güvence altına alınır.
Not: Sunucunun nasıl yapılandırılacağı, kurulacağı ve ardından MongoDB'nin güvenli bir şekilde nasıl kurulacağıyla ilgili eğitimler Ubuntu 20.04'e yöneliktir. Bu eğitim, altta yatan işletim sistemine değil, MongoDB'nin kendisine odaklanır. Kimlik doğrulaması etkinleştirildiği sürece, işletim sisteminden bağımsız olarak genellikle tüm MongoDB kurulumlarıyla çalışır.
Adım 1 – MongoDB Sunucusuna Bağlanın
Bir MongoDB kabuğu açmak için sunucu komut isteminizden mongo komutunu çalıştırın. Varsayılan olarak, mongo komutu 27017 numaralı bağlantı noktasında çalışan yerel olarak yüklenmiş bir MongoDB örneğine bağlanan bir kabuk açar.
Mongo komutunu herhangi bir ek parametre olmadan çalıştırın:
mongo
Bu, kabuğun bağlı olduğu sunucu ve yüklü MongoDB sürümü hakkında bazı bilgiler içeren bir karşılama mesajı yazdırır. Aşağıdaki örnek, varsayılan MongoDB bağlantı noktası (27017) ve 4.4.6 sürümünde çalışan 127.0.0.1 (localhost'u temsil eden bir geri döngü arayüzü) üzerinde çalışan MongoDB sunucusunu göstermektedir.
Output
MongoDB shell version v4.4.6
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("b9a48dc7-e821-4b09-a753-429eedf072c5") }
MongoDB server version: 4.4.6Sunucudaki tüm veritabanlarını listelemeye çalışın. Kabuk komutundan sonra show dbs yazın ve ENTER tuşuna basın:
show dbsMongoDB Güvenliğini Sağlama başlıklı ön koşul eğitimini takip ettiğinizi varsayarsak, bu komut herhangi bir çıktı döndürmeyecektir. Bunun nedeni, MongoDB sunucusu çalışıyor ve kabuk ona bağlanabilmiş olsa bile, herhangi bir kimlik doğrulama bilgisi sağlamamış olmanızdır. Bu nedenle, sunucunun veritabanlarından herhangi biriyle çalışmak için herhangi bir erişim hakkınız yoktur ve show dbs komutu herhangi bir çıktı döndürmeyecektir.
Aşağıdaki komutu yazarak çıkın:
exitMongo kabuğu kısa bir veda mesajı yazdırır ve sizi sistem kabuğuna geri döndürür:
Output
byeNot: Çıkış komutunu yazmak yerine, kabuğu kapatmanın alternatif bir yolu CTRL+C'ye basmaktır.
Şimdi MongoDB kabuğunu veritabanı sunucusuna tekrar bağlayın, ancak bu sefer MongoDB örneğinize doğru kimlik doğrulaması için bir kullanıcı adı ve parola sağlayın. Bunu yapmak için, aşağıdaki örnekte olduğu gibi ek komut satırı parametreleri sağlamanız gerekir:
mongo -u AdminSammy -p --authenticationDatabase adminBu komut birkaç bölümden oluşmaktadır:
- -u: Bu bayrak, MongoDB sunucusunda kimlik doğrulama için kullanılan kullanıcı adını ayarlar.
- -p: Bu bayrak, MongoDB kabuğuna veritabanına bağlanırken bir parola kullanmasını söyler. ENTER tuşuna bastıktan sonra, terminal penceresinde bir parola girmeniz istenecektir.
- --authenticationDatabase: Bu seçenek, oturum açtığınız kullanıcı kimlik doğrulama veritabanını belirtir. Genellikle yönetici hesapları admin veritabanında yönetilir, ancak kullanıcı kimlik doğrulama veritabanınız farklıysa, admin yerine o veritabanını girin.
Not: Localhost dışındaki bir makinede çalışan bir MongoDB sunucusuna bağlanmak için kabuk komutuna -h bayrağını ve ardından sunucunuzun IP adresini ekleyebilirsiniz.
Kurulum sırasında belirlediğiniz şifreyi girerek tekrar shell'e erişebilirsiniz.
Şimdi show dbs komutunu bir kez daha çalıştırın:
show dbs
Bu sefer komut sistemdeki tüm veritabanlarının listesini döndürür:
Output
admin 0.000GB
config 0.000GB
local 0.000GBAyrıcalıklı bir kullanıcı olarak kimlik doğrulaması yaptığınız için kabuk, bu veritabanlarından herhangi birinde komut çalıştırmanıza olanak tanır.
Artık MongoDB kabuğunu kullanarak MongoDB sunucusuna başarıyla bağlandığınıza göre, kabukta komutları nasıl çalıştıracağınızı öğrenmeye geçebilirsiniz.
Adım 2 – Komutları yürütün
Diğer komut satırı arayüzleri gibi, MongoDB kabuğu da komutları kabul eder ve istenen sonuçları standart çıktıya döndürür. Daha önce de belirtildiği gibi, MongoDB kabuğunda tüm komutlar, büyüktür işaretiyle (>) gösterilen komut satırında yazılır. Komuttan sonra ENTER tuşuna basıldığında komut hemen yürütülür ve komut çıktısı ekrana döndürülür.
MongoDB veritabanındaki çoğu komut, seçili bir veritabanında veya veritabanı kümesinde çalıştırılır. Seçili veritabanı, kabuk aracılığıyla erişilebilen db nesnesiyle temsil edilir. Kabukta db yazarak hangi veritabanının seçili olduğunu kontrol edebilirsiniz:
dbYeni bağlanan bir kabuk örneğinde, seçili veritabanı her zaman test olarak adlandırılır:
Output
test
MongoDB ve MongoDB kabuğunu test etmek için bu veritabanını güvenle kullanabilirsiniz. Başka bir veritabanına geçmek için, use komutunu çalıştırıp ardından yeni veritabanının adını girebilirsiniz. Fruit adlı bir veritabanına geçmeyi deneyin:
use fruits
Kabuk size artık yeni veritabanını kullandığınızı bildirecektir:
Output
switched to db fruitsŞu anda seçili olan veritabanı adını bulmak için db'yi tekrar yazarak bunu doğrulayabilirsiniz:
dbBu sefer çıktı yeni veritabanını yansıtıyor:
Output
fruitsFruits veritabanını açıkça oluşturmadığınızı unutmayın. MongoDB, henüz mevcut olmayan veritabanları ve koleksiyonlar üzerinde komut çalıştırmanıza olanak tanır. Bu yapıları yalnızca içlerine ilk kez bir nesne eklendiğinde oluşturur. Mevcut veritabanını Fruits olarak başarıyla değiştirseniz bile, bu veritabanı henüz mevcut değildir.
Bu veritabanını, içine bir nesne ekleyerek oluşturmayı deneyin. Aşağıdaki örnek, veritabanındaki elmalar adlı bir koleksiyona bir nesnenin nasıl ekleneceğini açıklamaktadır. Bu nesneyi ekleyerek, işlem hem meyveler veritabanını hem de elmalar koleksiyonunu oluşturur.
MongoDB kabuğuna aşağıdaki satırı yazın ve ENTER tuşuna basın. Vurgulanan koleksiyon adına (elmalar) dikkat edin:
db.apples.insert()
Açılış parantezinden sonra ENTER tuşuna basmak, birden fazla satıra daha uzun komutlar girmenize olanak tanıyan çok satırlı bir komut istemini başlatır. Ekleme komutu, kapanış parantezi girilene kadar tam olarak girilmez. Kapanış parantezi girilene kadar, komut istemi büyüktür işaretinden üç noktaya (…) dönüşür.
MongoDB komutlarını bu şekilde birden fazla satıra bölmenize gerek yok, ancak bunu yapmak uzun komutların okunmasını ve anlaşılmasını kolaylaştırabilir.
Bir sonraki satırda, nesneyi bir çift parantez ({ ve }) içine alın. Bu örnek belgede yalnızca bir alan ve değer çifti vardır:
{name: 'Red Delicious'}
Tekrar ENTER tuşuna bastığınızda, MongoDB ekleme yönteminin izin verdiği diğer belgeler veya özellikler gibi daha fazla komut parametresi eklemenize olanak tanıyan başka bir satır görünecektir. Ancak bu örnekte, girişinizi sonlandırabilir ve bir parantez kapatıp ENTER tuşuna basarak işlemi gerçekleştirebilirsiniz.
Bu sefer Mongo kabuğu, insert komutunun sonunu kaydeder ve komutun tamamını yürütür.
Output
WriteResult({ "nInserted" : 1 })Bu yeni nesneyi veritabanına ekledikten sonra hem meyveler veritabanı hem de elmalar koleksiyonu var olacaktır. Kullanılabilir veritabanlarının listesini show dbs komutuyla kontrol edin:
show dbs
Tekrar, kullanılabilir tüm veritabanlarının bir listesini döndürür, ancak bu sefer liste meyve veritabanını da içerir:
Output
admin 0.000GB
config 0.000GB
fruits 0.000GB
local 0.000GBShow collections komutu, şu anda seçili veritabanındaki koleksiyonların listesini almak için kullanışlıdır:
show collections
Meyve veritabanı seçildiği için, yalnızca yeni oluşturulan elma kümesini döndürecektir:
Output
applesBununla birlikte, MongoDB kabuğunda komut çalıştırmayı öğrendiniz. Ayrıca, sunucuda artık mevcut olan yeni bir veritabanı ve yeni bir koleksiyon oluşturan bir örnek nesnesi de oluşturdunuz.
Bu kılavuzun son adımında, komutları daha iyi anlamak ve daha kolay çalıştırmak için MongoDB kabuk yardımcı özelliklerini nasıl çağıracağınızı öğreneceksiniz.
Adım 3 – Kabuktan etkileşimli yardım alın
MongoDB kabuğu, veritabanı sistemindeki mevcut komutlar ve içinde depolanan nesneler hakkında bilgi edinmek için kullanabileceğiniz yerleşik bir yardım sistemine sahiptir. Bu giriş yardım sayfasına, doğrudan kabuk isteminde şu komutla erişilebilir: help.
help
MongoDB kabuğu, kabuğun belirli bölümleri hakkında daha fazla bilgi edinmek için kullanabileceğiniz daha ayrıntılı yardım girdilerinin bir listesini ve en sık kullanılan komutların bazı örneklerini döndürür:
Output
db.help() help on db methods
db.mycoll.help() help on collection methods
sh.help() sharding helpers
rs.help() replica set helpers
help admin administrative help
help connect connecting to a db help
help keys key shortcuts
help misc misc things to know
help mr mapreduce
show dbs show database names
show collections show collections in current database
show users show users in current database
show profile show most recent system.profile entries with time >= 1ms
show logs show the accessible logger names
show log [name] prints out the last segment of log in memory, 'global' is default
use <db_name> set current database
db.mycoll.find() list objects in collection mycoll
db.mycoll.find( { a : 1 } ) list objects in mycoll where a == 1
it result of the last line evaluated; use to further iterate
DBQuery.shellBatchSize = x set default number of items to display on shell
exit quit the mongo shellBu örneğin çıktısında vurgulanan ilk iki giriş, yardımcı komutun geçerli veritabanı ve geçerli veritabanındaki bir koleksiyon için nasıl çalıştırılacağını göstermektedir. Verilen örnek koleksiyon adı mycoll'dur, ancak geçerli herhangi bir koleksiyon adı kullanılabilir.
Vurgulanan son satır - db.mycoll.find() - belirli bir koleksiyondaki nesneleri listeleyen find komutunu kullanarak bir koleksiyondan nesne alma yöntemine bir örnektir. Koleksiyonlar, bir Mongo veritabanında en sık kullanılan yapılardan bazıları olduğundan, bu adımda Mongo'nun koleksiyon düzeyindeki find() ve help() yöntemlerinin nasıl kullanılacağını inceleyeceğiz.
Öncelikle, bu paket için kullanılabilir komutları bulmak için apples paketinin man sayfasına erişin:
db.apples.help()
Not: Orijinal help komutu sadece help iken, veritabanı ve koleksiyon nesneleri üzerinde yardımcı bir metodu çalıştırırken komutun ardından parantez kullanmanız gerekir, böylece help() olarak okunur ve sadece help olarak okunmaz.
Bu komutun çıktısı, apples koleksiyonunda gerçekleştirebileceğiniz mevcut komutların uzun bir listesidir:
Output
DBCollection help
db.apples.find().help() - show DBCursor help
db.apples.bulkWrite( operations, <optional params> ) - bulk execute write operations, optional parameters are: w, wtimeout, j
db.apples.count( query = {}, <optional params> ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeMS
db.apples.countDocuments( query = {}, <optional params> ) - count the number of documents that matches the query, optional parameters are: limit, skip, hint, maxTimeMS
. . .
db.apples.find([query],[fields]) - query is an optional query filter. fields is optional set of fields to return.
e.g. db.apples.find( {x:77} , {name:1, x:1} )
db.apples.find(...).count()
db.apples.find(...).limit(n)
db.apples.find(...).skip(n)
db.apples.find(...).sort(...)
. . .db.apples koleksiyonunda çalıştırabileceğiniz mevcut komutların temiz bir listesine ek olarak (her birinin ardından komutun ne işe yaradığına dair kısa bir açıklama bulunur), bu man sayfası ayrıca find() gibi yaygın olarak kullanılan komutların kullanımına ilişkin örnekler de sağlar.
Bu yerleşik yardım sistemi, mevcut komutlar için kullanışlı bir referans görevi görür. Bir komutun tam yazılışını veya kabul edilebilir kısımlarını hatırlayamıyorsanız, sözdiziminizi kontrol etmek için bunu kullanabilirsiniz.
find() fonksiyonunun bir koleksiyondan nesne almak için kullanılabileceğini man sayfalarından öğrendiğinize göre, artık bir önceki adımda apples koleksiyonunda oluşturulan nesneyi alabilirsiniz.
Ancak bu örnek, komut tamamlama olarak bilinen başka bir etkileşimli MongoDB yardımcısını vurgulamaktadır. MongoDB kabuğu, Bash veya zsh gibi diğer popüler kabuklarda bulunan kalıbı izler; klavyedeki TAB tuşuna basıldığında, yazmakta olduğunuz herhangi bir komut otomatik olarak tamamlanır.
Aşağıdakileri yazarak başlayın, ancak henüz ENTER'a basmayın:
db.a
Koleksiyonun tam adını yazmak yerine klavyenizdeki TAB tuşuna basın. MongoDB kabuğu, aşağıdakilerle başlayarak tüm mevcut olasılıkların bir listesiyle yanıt verir:
Output
> db.a
db.adminCommand( db.aggregate( db.apples db.auth(Bu çıktıda, açık parantezlerle gösterilen üç komut ve elmalar kümesi listelenir.
Shell'e bir harf daha yazın:
db.ap
Bir kez daha TAB tuşuna basın. Bu sefer ap ile başlamak için başka bir seçenek yok ve MongoDB kabuğu girdiyi otomatik olarak tamamlayıp sizin için db.apples yazacak. Aynı prensibi izleyin ve find() komutunu TAB tamamlama kullanarak tamamlayın. fi yazın ama ENTER tuşuna basmayın:
db.apples.fi
TAB tuşuna basmak, komut adını db.apples.find olarak otomatik olarak tamamlayacaktır. Bu noktada, TAB tuşuna tekrar basmak, kabuğun daha fazla olasılık listelemesine neden olacaktır, ancak find komutunu çalıştırmak için manuel olarak bir kapatma parantezi ekleyebilirsiniz:
db.apples.find()
Kabuk, elma koleksiyonundaki tüm nesnelerin bir listesini görüntüler. Yalnızca daha önce içe aktardığınız tek bir nesne olacaktır:
Output
{ "_id" : ObjectId("60f31447f5643f739b0276e9"), "name" : "Red Delicious" }Sonuç
Bu makalede, MongoDB kabuğu tanıtılacaktır. Kabuk, veritabanına yeni nesneler eklemenize, mevcut koleksiyonları sorgulamanıza ve veritabanını, verilerini ve kullanıcılarını yönetmek için yönetim görevleri gerçekleştirmenize olanak tanır.









