MongoDb Sık Kullanılan Komutlar
MongoDb'ye bağlanma
mongo mongodb://localhost:25080 --authenticationDatabase "admin" -u "apinizer" -p
POWERSHELL
Bağlantıktan sonraki tüm işlemler için, doğru veritabanına geçilmeli ve burada çalışılmalıdır
use apinizerdb
POWERSHELL
Genel komutlar
#Replicaset detaylarını gösterme
rs.status()
#Kullanıcıları gösterme
db.getUsers()
#Mevcut veritabanındaki koleksiyonların isim ve bilgilerini gösterme
db.getCollectionNames()
db.getCollectionInfos()
#Herhangi bir koleksiyonun boyutunu MB olarak görme
db.audit_event.stats().storageSize/1024/1024
POWERSHELL
Arama
db.user.find( { login: "admin" } );
db.db_to_api.find().pretty().limit(10)
#Api Proxy'de full text search
db.api_proxy.ensureIndex(
{ "$**": "text" },
{ name: "TextIndex" }
);
#Belirli koleksiyonda bir metin araması yapar.
db.api_proxy.find(
{
$text: {
$search: "XMLRESULTwithNS"
}
},{
"name":1
}
)
#Kriter ile arama yapma
db.api_proxy.find( {importedUrl: /.*kps.*/ })
#Çoklu kriter ile arama yapma
db.getCollection('api_proxy').find({$and: [{'routing.kpsSettings': { $exists: true }},{importedUrl: /.*kps.*/ }]})
#Regex kullanımı
db.api_proxy.find({ "apiMethodList": { "$elemMatch": { "requestPolicyList": { "$elemMatch": { "name": { "$regex" : /^PolicyJwt3rdAuthentication/i } } } } } });
db.api_proxy.find({ "requestPolicyList": { "$elemMatch": { "name": { "$regex" : /^PolicyJwt3rdAuthentication/i } } } });
db.api_proxy.find({ "requestPolicyList": { "$elemMatch": { "_class": { "$regex" : /.*jwt.*/i } } } } , {"name":1,"requestPolicyList.name":1,"requestPolicyList._class":1});
#Tüm alanlarda arama yapılması
db.api_proxy.find({ $where: function() {
for (var key in this) {
if (JSON.stringify(this[key]).indexOf("172.16.1.1") !== -1) {
return true;
}
}
return false;
}}, {_id: 0,name:1,projectId:1})
#Son 2 saate kadar olan logların sayısını getirir
mongosh mongodb://localhost:25080/apinizerdb --authenticationDatabase "admin" -u "apinizer" -p "password" --eval 'db.apinizer_log.find({"date":{"$lte": new Date((new Date().getTime() - (2 * 60 * 60 * 1000)))}}).count()'
POWERSHELL
Bir Variable'ın hangi Api Proxy'lerdeki hangi Metotlarda kullanıldığını arama
#Fonksiyon çalıştırılmadan önce "use apinizerdb" komutu ile doğru database'e geçilmelidir.
function getApiMethodListObjectsWithFilledRequestPolicyList(nameToCheck) {
let skipCount = 0;
const limitCount = 1000;
console.log("Çıktı formatı: Proxy Adı;Metod Adı;Request/Response Hattı;Politika cinsi.")
console.log("")
while (true) {
const cursor = db.api_proxy.find(
{ "apiMethodList": { $exists: true, $ne: [] } }
).skip(skipCount).limit(limitCount);
if (!cursor.hasNext()) {
break;
}
cursor.forEach(doc => {
doc.apiMethodList.forEach(object => {
if (object.requestPolicyList && object.requestPolicyList.length > 0) {
object.requestPolicyList.forEach(policy => {
if (JSON.stringify(policy).includes(nameToCheck)) {
console.log(doc.name + ";" + object.name + ";Request;" + policy._class)
}
});
}
if (object.responsePolicyList && object.responsePolicyList.length > 0) {
object.responsePolicyList.forEach(policy => {
if (JSON.stringify(policy).includes(nameToCheck)) {
console.log(doc.name + ";" + object.name + ";Response;" + policy._class)
}
});
}
});
if (doc.requestPolicyList && doc.requestPolicyList.length > 0) {
doc.requestPolicyList.forEach(policy => {
if (JSON.stringify(policy).includes(nameToCheck)) {
console.log(doc.name + ";ALL;Request;" + policy._class)
}
});
}
if (doc.responsePolicyList && doc.responsePolicyList.length > 0) {
doc.responsePolicyList.forEach(policy => {
if (JSON.stringify(policy).includes(nameToCheck)) {
console.log(doc.name + ";ALL;Response;" + policy._class)
}
});
}
});
skipCount += limitCount;
}
console.log("")
}
getApiMethodListObjectsWithFilledRequestPolicyList("KEYWORDTOSEARCH");
JS
Güncelleme
#Alt elemanın güncellenmesi
db.api_proxy.update( {name :"KYS Yabanci AdSoyad Getir GW"}, {$set: {"routing.connectTimeout": "30"}} );
#Soap-2-Rest cinsindeki bir proxy'deki tüm "unwrapelement" objelerinin değerini true'a çevirme (1 kayıt içinde birden fazla array'de düzenleme yapılırsa sonuç 1 olarak döner)
db.api_proxy.updateMany({relativePath:"/tarServis"},{$set:{"apiMethodList.$[].protocolTransformation.unwrapElement":true}});
#Alt elemana obje eklenmesi (objedeki array'in ikinci objesine ilgili alanı ekler )
db.api_proxy.update( {"relativePath":"/ydsSorgulamaServisi"}, {$push: {"requestPolicyList.1.unPasswordDecrypted": "false"}} );
#admin kullanıcısının şifresini "admin" yapma
db.user.update({"login" : "admin"},{$set: { "password" : "$2a$10$Wv6i9IIdNzlxgDdaf13UdOl7uumVcG7zkSEKaOG4Xqn6IlLuwA13e"}});
#Bir tabloyu kontrol etme ve bir kritere uyan kayıtların değeri değiştirme
db.getCollection('patch_history').find({})
db.patch_history.update({"status" : "RUNNING"},{$set: { "status" : "COMPLETED"}});
db.api_proxy.update( {},
{
"$pull": {
"apiProxyDeployList": {
"environmentSettingsId": "60e2ad54d5ba7a7636db3aa6"
}
}
}, { "multi": true }
);
db.api_proxy.update( {_id : ObjectId("611628a3c21a5c04977e98e2")},
{
"$pull": {
"apiProxyDeployList": {
"environmentSettingsId": "60e2ad54d5ba7a7636db3aa6"
}
}
}, { "multi": true }
);
POWERSHELL
Silme
#Obje silme (where koşuluna uygun her şeyi siler)
db.privacy_settings.remove({ "salt":"UCPyFvw0EAnOgfOJ" })
#api_proxy altındaki apiProxyDeployList'i temizleme
//ilk satırdaki where koşulu, tüm doküman üzerinde güncelleme yapılmak istendiği için boş
//ikinci satırdaki where koşulu, apiProxyDeployList'in altındaki her şey silineceği için boş
db.api_proxy.update(
{ },
{$pull : {"apiProxyDeployList" : {} }}
)
#Koleksiyondaki tüm kayıtları silme (truncate)
db.db_to_api.remove({})
#Koleksiyonu drop etme
db.db_to_api.drop()
#Koleksiyonu mongoya girmeden drop etme
mongo "mongodb://<IP_ADDRESS>:25080/apinizerdb" --eval 'db.getSiblingDB("admin").auth("apinizer", "PASSWORD"); db.getSiblingDB("apinizerdb").apinizer_log.drop();'
#Veritabanını drop etme
db.dropDatabase()
POWERSHELL
Replicaset İşlemleri
#replicaset'li sistemde replicayı masterdan sync'e zorlama
rs.syncFrom("hostname:port");
POWERSHELL
Yedekleme ve Geri Yükleme
#Yedek alma
sudo mongodump --host <IP_ADDRESS> --port=25080 --username=apinizer --password=<PASSWORD> --authenticationDatabase=admin --gzip --archive=/home/apinizer/apinizer-backup-2023-01-31--1.archive
#Bazı boyutu büyük tabloları hariç tutarak yedek alma
sudo mongodump --host <IP_ADDRESS> --port 25080 --excludeCollection apinizer_log --excludeCollection audit_event -d apinizerdb --authenticationDatabase "admin" -u apinizer -p <PASSWORD> --gzip --archive=/home/apinizer/apinizer-backup-2023-01-31--1.archive
#Yedeği geri yükleme
sudo mongorestore --drop --host <IP_ADDRESS> -port 25080 -u apinizer -p <PASSWORD> --authenticationDatabase=admin --gzip --archive=/home/apinizer/apinizer-backup-2023-01-31--1.archive
#Tek koleksiyonu yedekleme
sudo mongodump --host <IP_ADDRESS> --port=25080 --authenticationDatabase "admin" -d apinizerdb -u apinizer -p <PASSWORD> --collection=<COLLECTION_NAME> --out=/home/apinizer/
#Tek koleksiyonlu yedekten geri yükleme
sudo mongorestore --drop --host <IP_ADDRESS> --port=25080 --authenticationDatabase "admin" -d apinizerdb -u apinizer -p <PASSWORD> --collection=<COLLECTION_NAME> /home/apinizer/apinizerdb/<COLLECTION_NAME>.bson
#Toplu veritabani yedeklerinde gzip ile sıkıştırılma yapılabiliyor, bu durumda aşağıdaki komutu kullanarak düzgün bir archive haline getirip yukarıdaki komutu tekrar çalıştırabilirsiniz.
gunzip < all-dbs-backup-2023-10-5--02.archive > all-dbs-backup-2023-10-5--02
#Toplu veritabani yedeği içerisinden tek bir koleksiyonu geri yükleme
mongorestore --host <IP_ADDRESS> --port 25080 --username apinizer --password <PASSWORD> --authenticationDatabase admin --drop --nsInclude 'apinizer-dev.environment_settings' --archive=all-dbs-backup-2023-10-5--02
POWERSHELL
Loglar
#Uygulama logları
sudo tail -999f /var/log/mongodb/mongod.log
POWERSHELL
Apinizer'da API Proxy Yeniden Oluşturma ve Elasticsearch Loglarına Ulaşma
Bu komutlar, bir API Proxy silindiğinde ve yeniden oluşturulduğunda ya da export/import işlemleri yapıldığında Elasticsearch loglarına aynı API Proxy üzerinden erişimi sağlamak için kullanılır.
# Proxy belgesini bir değişkende sakla
doc = db.api_proxy.findOne({_id: ObjectId("YANLISPROXYID")})
# Yeni bir _id ayarla
doc._id = ObjectId("OLMASIGEREKENPROXYID")
# Yeni _id ile belgeyi ekle
db.api_proxy.insert(doc)
# Eski _id ile olan belgeyi sil
db.api_proxy.remove({_id: ObjectId("YANLISPROXYID")})
# Apinizer için gerekli güncelleme
db.api_proxy_revision.update({apiProxyId:"YANLISPROXYID"}, {$set: { apiProxyId:"OLMASIGEREKENPROXYID"}})
# Yetkilerin güncellenmesi
db.credential_allowed_api_proxy.updateMany({apiProxyId:"YANLISPROXYID"}, {$set: { apiProxyId:"OLMASIGEREKENPROXYID"}})
POWERSHELL