{"id":31982,"date":"2025-10-16T09:41:11","date_gmt":"2025-10-16T06:41:11","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=31982"},"modified":"2025-10-16T09:41:11","modified_gmt":"2025-10-16T06:41:11","slug":"mongodb-tutorial-kapsamli-bir-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/","title":{"rendered":"MongoDB Tutorial: Kapsaml\u0131 Bir Rehber"},"content":{"rendered":"<p><body><\/p>\n<h2>MongoDB Tutorial: Kapsaml\u0131 Bir Rehber<\/h2>\n<p>MongoDB, modern uygulamalar\u0131n h\u0131zla de\u011fi\u015fen veri ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131lamak \u00fczere tasarlanm\u0131\u015f, a\u00e7\u0131k kaynakl\u0131, belge tabanl\u0131 bir NoSQL veri taban\u0131d\u0131r. Geleneksel ili\u015fkisel veri tabanlar\u0131n\u0131n kat\u0131 \u015fema yap\u0131s\u0131n\u0131n aksine, MongoDB esnek bir \u015fema sunar ve bu sayede geli\u015ftiricilere verilerini daha do\u011fal ve sezgisel bir \u015fekilde depolama imkan\u0131 tan\u0131r. Bu kapsaml\u0131 rehberde, MongoDB&#8217;nin temel kavramlar\u0131ndan ba\u015flayarak kurulumuna, temel CRUD (Create, Read, Update, Delete) i\u015flemlerine, indekslemeye, agregasyona ve ileri seviye \u00f6zelliklerine kadar bir\u00e7ok konuyu ele alaca\u011f\u0131z.<\/p>\n<h3>MongoDB Nedir ve Neden Kullan\u0131l\u0131r?<\/h3>\n<p>MongoDB, verileri JSON benzeri belge format\u0131nda depolayan bir NoSQL veri taban\u0131d\u0131r. &#8220;Belge tabanl\u0131&#8221; olmak, verilerin anahtar-de\u011fer \u00e7iftleri, diziler ve i\u00e7 i\u00e7e ge\u00e7mi\u015f belgelerden olu\u015fan esnek, kendi kendini a\u00e7\u0131klayan yap\u0131lar olarak sakland\u0131\u011f\u0131 anlam\u0131na gelir. \u0130li\u015fkisel veri tabanlar\u0131ndaki sat\u0131r ve s\u00fctun yap\u0131s\u0131n\u0131n aksine, MongoDB&#8217;de her belge farkl\u0131 alanlara sahip olabilir.<\/p>\n<p><strong>Neden MongoDB Kullan\u0131lmal\u0131?<\/strong><\/p>\n<p>1.  <strong>Esneklik ve \u015eemas\u0131z Yap\u0131:<\/strong> MongoDB, \u00f6nceden tan\u0131mlanm\u0131\u015f bir \u015femaya ba\u011fl\u0131 kalmadan veri depolaman\u0131za olanak tan\u0131r. Bu, uygulama gereksinimleri de\u011fi\u015ftik\u00e7e veri yap\u0131s\u0131n\u0131 kolayca adapte edebilece\u011finiz anlam\u0131na gelir. H\u0131zl\u0131 prototipleme ve \u00e7evik geli\u015ftirme s\u00fcre\u00e7leri i\u00e7in idealdir.<br \/>\n2.  <strong>Y\u00fcksek Performans:<\/strong> \u00d6zellikle b\u00fcy\u00fck veri setleri ve y\u00fcksek okuma\/yazma y\u00fckleri alt\u0131nda performansl\u0131 \u00e7al\u0131\u015f\u0131r. \u0130ndeksleme, sorgu optimizasyonu ve yatay \u00f6l\u00e7eklendirme yetenekleri sayesinde h\u0131zl\u0131 veri eri\u015fimi sa\u011flar.<br \/>\n3.  <strong>\u00d6l\u00e7eklenebilirlik:<\/strong> MongoDB, yatay \u00f6l\u00e7eklendirme (sharding) yetenekleri sayesinde veri taban\u0131n\u0131z\u0131 kolayca geni\u015fletebilir. Verilerinizi birden fazla sunucuya da\u011f\u0131tarak y\u00fcksek hacimli trafik ve b\u00fcy\u00fck veri setlerini y\u00f6netebilir.<br \/>\n4.  <strong>Y\u00fcksek Eri\u015filebilirlik:<\/strong> Replikasyon setleri (replica sets) arac\u0131l\u0131\u011f\u0131yla veri taban\u0131n\u0131z\u0131n her zaman eri\u015filebilir olmas\u0131n\u0131 sa\u011flar. Bir sunucu ar\u0131zalansa bile, di\u011fer sunucular devreye girerek veri kayb\u0131n\u0131 \u00f6nler ve hizmet kesintisini minimize eder.<br \/>\n5.  <strong>Zengin Sorgu Dili:<\/strong> SQL&#8217;e benzer g\u00fc\u00e7l\u00fc ve esnek bir sorgu dili sunar. Karma\u015f\u0131k sorgular\u0131, filtrelemeyi, s\u0131ralamay\u0131, projeksiyonu ve agregasyon i\u015flemlerini kolayca yapman\u0131z\u0131 sa\u011flar.<br \/>\n6.  <strong>Geli\u015ftirici Dostu:<\/strong> JSON benzeri BSON format\u0131 sayesinde, JavaScript, Python, Java, C#, Node.js gibi pop\u00fcler programlama dilleriyle kolayca entegre edilebilir. Geli\u015ftiricilerin veri taban\u0131yla etkile\u015fim kurmas\u0131n\u0131 basitle\u015ftirir.<\/p>\n<p><strong>Kullan\u0131m Alanlar\u0131:<\/strong><\/p>\n<p>*   <strong>B\u00fcy\u00fck Veri (Big Data):<\/strong> Petabaytlarca veriyi depolama ve i\u015fleme yetene\u011fi sayesinde b\u00fcy\u00fck veri uygulamalar\u0131 i\u00e7in idealdir.<br \/>\n*   <strong>Ger\u00e7ek Zamanl\u0131 Analizler:<\/strong> Y\u00fcksek performansl\u0131 okuma\/yazma i\u015flemleri sayesinde ger\u00e7ek zamanl\u0131 analiz ve raporlama sistemlerinde kullan\u0131l\u0131r.<br \/>\n*   <strong>\u0130\u00e7erik Y\u00f6netim Sistemleri (CMS):<\/strong> Esnek \u015femas\u0131, farkl\u0131 i\u00e7erik t\u00fcrlerini (makaleler, resimler, videolar) kolayca y\u00f6netmeye olanak tan\u0131r.<br \/>\n*   <strong>Mobil Uygulamalar:<\/strong> \u00d6l\u00e7eklenebilirlik ve performans gereksinimleri y\u00fcksek mobil backend&#8217;leri i\u00e7in tercih edilir.<br \/>\n*   <strong>Nesnelerin \u0130nterneti (IoT):<\/strong> Sens\u00f6r verileri gibi y\u00fcksek hacimli ve yap\u0131land\u0131r\u0131lmam\u0131\u015f verilerin depolanmas\u0131nda etkilidir.<\/p>\n<h3>MongoDB Kurulumu<\/h3>\n<p>MongoDB&#8217;yi kullanmaya ba\u015flamak i\u00e7in \u00f6ncelikle sisteminize kurman\u0131z gerekir. Kurulum ad\u0131mlar\u0131 i\u015fletim sisteminize g\u00f6re de\u011fi\u015fiklik g\u00f6sterse de, genel mant\u0131k benzerdir.<\/p>\n<p>1.  <strong>MongoDB Topluluk Sunucusunu \u0130ndirme:<\/strong> MongoDB&#8217;nin resmi web sitesinden (mongodb.com\/try\/download\/community) i\u015fletim sisteminize uygun (Windows, macOS, Linux) kurulum paketini indirin.<br \/>\n2.  <strong>Kurulum Sihirbaz\u0131n\u0131 Takip Etme:<\/strong> \u0130ndirdi\u011finiz paketi \u00e7al\u0131\u015ft\u0131r\u0131n ve kurulum sihirbaz\u0131ndaki ad\u0131mlar\u0131 takip edin. \u00c7o\u011fu durumda &#8220;Complete&#8221; kurulum se\u00e7ene\u011fini tercih edebilirsiniz.<br \/>\n3.  <strong>Veri ve Log Dizinlerini Olu\u015fturma:<\/strong> MongoDB, varsay\u0131lan olarak <code>C:\\data\\db<\/code> (Windows) veya <code>\/data\/db<\/code> (Linux\/macOS) dizinine veri dosyalar\u0131n\u0131 kaydeder. Bu dizinleri manuel olarak olu\u015fturman\u0131z gerekebilir.<br \/>\n    *   <strong>Windows:<\/strong> <code>md C:\\data\\db<\/code><br \/>\n    *   <strong>Linux\/macOS:<\/strong> <code>sudo mkdir -p \/data\/db<\/code> ve <code>sudo chown -R $(whoami) \/data\/db<\/code><br \/>\n4.  <strong>MongoDB Sunucusunu Ba\u015flatma:<\/strong> Komut istemcisi veya terminal \u00fczerinden <code>mongod<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak MongoDB sunucusunu ba\u015flat\u0131n.<br \/>\n    *   <code>mongod<\/code><br \/>\n    *   E\u011fer <code>mongod<\/code> komutunu bulamazsa, MongoDB&#8217;nin kurulu oldu\u011fu dizindeki <code>bin<\/code> klas\u00f6r\u00fcn\u00fc sistem PATH&#8217;inize eklemeniz gerekebilir.<br \/>\n5.  <strong>MongoDB Kabu\u011funa Ba\u011flanma:<\/strong> Yeni bir komut istemcisi veya terminal a\u00e7arak <code>mongosh<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131n. Bu, MongoDB kabu\u011funa ba\u011flanman\u0131z\u0131 sa\u011flar ve veri taban\u0131yla etkile\u015fim kurman\u0131z\u0131 sa\u011flar.<br \/>\n    *   <code>mongosh<\/code><\/p>\n<p>Ba\u015far\u0131l\u0131 bir kurulum ve ba\u011flant\u0131n\u0131n ard\u0131ndan, <code>mongosh<\/code> ekran\u0131nda <code>test<\/code> veri taban\u0131na ba\u011fl\u0131 oldu\u011funuzu g\u00f6receksiniz.<\/p>\n<h3>Temel MongoDB Kavramlar\u0131<\/h3>\n<p>MongoDB&#8217;nin yap\u0131s\u0131n\u0131 anlamak i\u00e7in baz\u0131 temel kavramlar\u0131 bilmek \u00f6nemlidir:<\/p>\n<p>*   <strong>Veri Taban\u0131 (Database):<\/strong> \u0130li\u015fkisel veri tabanlar\u0131ndaki gibi, bir veri taban\u0131 birbiriyle ili\u015fkili koleksiyonlar\u0131n bir araya geldi\u011fi mant\u0131ksal bir kapsay\u0131c\u0131d\u0131r. Her uygulaman\u0131n genellikle kendi veri taban\u0131 olur.<br \/>\n    *   <code>use mydatabase<\/code> komutu ile <code>mydatabase<\/code> adl\u0131 bir veri taban\u0131na ge\u00e7i\u015f yapabilir veya yoksa olu\u015fturabilirsiniz.<br \/>\n*   <strong>Koleksiyon (Collection):<\/strong> \u0130li\u015fkisel veri tabanlar\u0131ndaki tablolara benzer. Belgelerin bir araya geldi\u011fi gruplard\u0131r. Bir koleksiyon i\u00e7indeki belgeler genellikle benzer bir yap\u0131ya sahiptir ancak kesinlikle ayn\u0131 olmak zorunda de\u011fildir.<br \/>\n    *   \u00d6rnek: <code>users<\/code> koleksiyonu, <code>products<\/code> koleksiyonu.<br \/>\n*   <strong>Belge (Document):<\/strong> MongoDB&#8217;deki temel veri birimidir. JSON (JavaScript Object Notation) format\u0131na benzeyen BSON (Binary JSON) format\u0131nda depolanan anahtar-de\u011fer \u00e7iftlerinden olu\u015fan yap\u0131lard\u0131r. \u0130li\u015fkisel veri tabanlar\u0131ndaki sat\u0131rlara benzerler ancak \u00e7ok daha esnektirler.<br \/>\n    *   Her belge benzersiz bir <code>_id<\/code> alan\u0131na sahiptir. Bu alan, MongoDB taraf\u0131ndan otomatik olarak olu\u015fturulur ve belgenin birincil anahtar\u0131 g\u00f6revi g\u00f6r\u00fcr.<br \/>\n    *   \u00d6rnek belge:<\/p>\n<pre><code class=\"language-json\">{\n          \"_id\": ObjectId(\"654a9d20c3a8e7b1d4f6a7b8\"),\n          \"name\": \"Ali Can\",\n          \"email\": \"ali.can@example.com\",\n          \"age\": 30,\n          \"address\": {\n            \"street\": \"Ana Cadde 123\",\n            \"city\": \"\u0130stanbul\",\n            \"zipCode\": \"34000\"\n          },\n          \"hobbies\": [\"reading\", \"hiking\", \"coding\"]\n        }<\/code><\/pre>\n<p>*   <strong>BSON (Binary JSON):<\/strong> MongoDB, verileri JSON&#8217;\u0131n ikili g\u00f6sterimi olan BSON format\u0131nda saklar. BSON, JSON&#8217;a g\u00f6re daha h\u0131zl\u0131 i\u015flenebilir ve daha fazla veri t\u00fcr\u00fcn\u00fc (\u00f6rne\u011fin, tarih, ikili veri) destekler.<\/p>\n<h3>CRUD \u0130\u015flemleri (Create, Read, Update, Delete)<\/h3>\n<p>MongoDB&#8217;de veri y\u00f6netimi, temel CRUD i\u015flemleri etraf\u0131nda d\u00f6ner.<\/p>\n<h4>Veri Ekleme (Create)<\/h4>\n<p>Yeni belgeleri bir koleksiyona eklemek i\u00e7in <code>insertOne()<\/code> ve <code>insertMany()<\/code> metotlar\u0131 kullan\u0131l\u0131r.<\/p>\n<p>*   <strong><code>insertOne()<\/code>:<\/strong> Tek bir belge ekler.<\/p>\n<pre><code class=\"language-javascript\">db.users.insertOne({\n      name: \"Ay\u015fe Y\u0131lmaz\",\n      email: \"ayse.yilmaz@example.com\",\n      age: 28,\n      status: \"active\"\n    });<\/code><\/pre>\n<p>    Bu komut, <code>users<\/code> koleksiyonuna yeni bir belge ekler ve otomatik olarak bir <code>_id<\/code> de\u011feri olu\u015fturur.<br \/>\n*   <strong><code>insertMany()<\/code>:<\/strong> Birden fazla belgeyi ayn\u0131 anda ekler. Belgeler bir dizi i\u00e7inde g\u00f6nderilir.<\/p>\n<pre><code class=\"language-javascript\">db.products.insertMany([\n      { name: \"Laptop\", brand: \"Dell\", price: 1200, stock: 50 },\n      { name: \"Mouse\", brand: \"Logitech\", price: 25, stock: 200 },\n      { name: \"Keyboard\", brand: \"Razer\", price: 75, stock: 100 }\n    ]);<\/code><\/pre>\n<h4>Veri Sorgulama (Read)<\/h4>\n<p>Mevcut belgeleri koleksiyonlardan okumak i\u00e7in <code>find()<\/code> ve <code>findOne()<\/code> metotlar\u0131 kullan\u0131l\u0131r.<\/p>\n<p>*   <strong><code>find()<\/code>:<\/strong> Belirtilen kriterlere uyan t\u00fcm belgeleri d\u00f6nd\u00fcr\u00fcr. Kriter belirtilmezse, koleksiyondaki t\u00fcm belgeleri d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-javascript\">\/\/ T\u00fcm kullan\u0131c\u0131lar\u0131 getir\n    db.users.find({});\n\n    \/\/ Ya\u015f\u0131 30'dan b\u00fcy\u00fck kullan\u0131c\u0131lar\u0131 getir\n    db.users.find({ age: { $gt: 30 } });\n\n    \/\/ Markas\u0131 \"Dell\" olan \u00fcr\u00fcnleri getir\n    db.products.find({ brand: \"Dell\" });<\/code><\/pre>\n<p>*   <strong><code>findOne()<\/code>:<\/strong> Belirtilen kriterlere uyan ilk belgeyi d\u00f6nd\u00fcr\u00fcr.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Ad\u0131 \"Ay\u015fe Y\u0131lmaz\" olan ilk kullan\u0131c\u0131y\u0131 getir\n    db.users.findOne({ name: \"Ay\u015fe Y\u0131lmaz\" });<\/code><\/pre>\n<p><strong>Sorgu Operat\u00f6rleri:<\/strong> MongoDB, zengin sorgu operat\u00f6rleri sunar:<\/p>\n<p>*   <strong>Kar\u015f\u0131la\u015ft\u0131rma Operat\u00f6rleri:<\/strong><br \/>\n    *   <code>$eq<\/code>: E\u015fittir (varsay\u0131lan)<br \/>\n    *   <code>$ne<\/code>: E\u015fit de\u011fildir<br \/>\n    *   <code>$gt<\/code>: B\u00fcy\u00fckt\u00fcr<br \/>\n    *   <code>$gte<\/code>: B\u00fcy\u00fck veya e\u015fittir<br \/>\n    *   <code>$lt<\/code>: K\u00fc\u00e7\u00fckt\u00fcr<br \/>\n    *   <code>$lte<\/code>: K\u00fc\u00e7\u00fck veya e\u015fittir<br \/>\n    *   <code>$in<\/code>: Belirtilen de\u011ferlerden birine e\u015fittir<br \/>\n    *   <code>$nin<\/code>: Belirtilen de\u011ferlerden hi\u00e7birine e\u015fit de\u011fildir<\/p>\n<pre><code class=\"language-javascript\">\/\/ Fiyat\u0131 50 ile 100 aras\u0131nda olan \u00fcr\u00fcnler\n    db.products.find({ price: { $gte: 50, $lte: 100 } });\n\n    \/\/ Markas\u0131 \"Dell\" veya \"Logitech\" olan \u00fcr\u00fcnler\n    db.products.find({ brand: { $in: [\"Dell\", \"Logitech\"] } });<\/code><\/pre>\n<p>*   <strong>Mant\u0131ksal Operat\u00f6rler:<\/strong><br \/>\n    *   <code>$and<\/code>: T\u00fcm ko\u015fullar do\u011fru olmal\u0131<br \/>\n    *   <code>$or<\/code>: Ko\u015fullardan en az biri do\u011fru olmal\u0131<br \/>\n    *   <code>$not<\/code>: Ko\u015fulun tersi<br \/>\n    *   <code>$nor<\/code>: T\u00fcm ko\u015fullar yanl\u0131\u015f olmal\u0131<\/p>\n<pre><code class=\"language-javascript\">\/\/ Ya\u015f\u0131 25'ten b\u00fcy\u00fck VE durumu \"active\" olan kullan\u0131c\u0131lar\n    db.users.find({ $and: [{ age: { $gt: 25 } }, { status: \"active\" }] });\n\n    \/\/ Ya\u015f\u0131 20'den k\u00fc\u00e7\u00fck VEYA ya\u015f\u0131 40'tan b\u00fcy\u00fck kullan\u0131c\u0131lar\n    db.users.find({ $or: [{ age: { $lt: 20 } }, { age: { $gt: 40 } }] });<\/code><\/pre>\n<p>*   <strong>Eleman Operat\u00f6rleri:<\/strong><br \/>\n    *   <code>$exists<\/code>: Belirtilen alan\u0131n var olup olmad\u0131\u011f\u0131n\u0131 kontrol eder<br \/>\n    *   <code>$type<\/code>: Belirtilen alan\u0131n veri tipini kontrol eder<\/p>\n<pre><code class=\"language-javascript\">\/\/ Email alan\u0131 olan belgeleri getir\n    db.users.find({ email: { $exists: true } });<\/code><\/pre>\n<p>*   <strong>Dizi Operat\u00f6rleri:<\/strong><br \/>\n    *   <code>$all<\/code>: Dizideki t\u00fcm elemanlar\u0131 i\u00e7erir<br \/>\n    *   <code>$size<\/code>: Dizinin belirli bir boyutta olmas\u0131n\u0131 sa\u011flar<br \/>\n    *   <code>$elemMatch<\/code>: Dizide belirli bir ko\u015fulu sa\u011flayan en az bir eleman olmas\u0131n\u0131 sa\u011flar<\/p>\n<pre><code class=\"language-javascript\">\/\/ Hobileri aras\u0131nda \"coding\" olan kullan\u0131c\u0131lar\n    db.users.find({ hobbies: \"coding\" });\n\n    \/\/ Hobileri aras\u0131nda \"reading\" VE \"hiking\" olan kullan\u0131c\u0131lar\n    db.users.find({ hobbies: { $all: [\"reading\", \"hiking\"] } });<\/code><\/pre>\n<p>*   <strong>Projeksiyon (Projection):<\/strong> Sorgu sonu\u00e7lar\u0131nda hangi alanlar\u0131n g\u00f6sterilece\u011fini belirler.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Sadece isim ve email alanlar\u0131n\u0131 getir, _id'yi gizle\n    db.users.find({}, { name: 1, email: 1, _id: 0 });<\/code><\/pre>\n<p>    <code>1<\/code> alan\u0131 dahil etmek, <code>0<\/code> alan\u0131 hari\u00e7 tutmak anlam\u0131na gelir. <code>_id<\/code> alan\u0131 varsay\u0131lan olarak gelir, onu gizlemek i\u00e7in a\u00e7\u0131k\u00e7a <code>0<\/code> olarak belirtmek gerekir.<br \/>\n*   <strong>S\u0131ralama (Sort), S\u0131n\u0131rland\u0131rma (Limit), Atlatma (Skip):<\/strong><\/p>\n<pre><code class=\"language-javascript\">\/\/ Ya\u015fa g\u00f6re artan s\u0131rada s\u0131rala ve ilk 5 belgeyi getir\n    db.users.find({}).sort({ age: 1 }).limit(5);\n\n    \/\/ Ya\u015fa g\u00f6re azalan s\u0131rada s\u0131rala, ilk 2 belgeyi atla ve sonraki 3 belgeyi getir\n    db.users.find({}).sort({ age: -1 }).skip(2).limit(3);<\/code><\/pre>\n<p>    <code>1<\/code> artan, <code>-1<\/code> azalan s\u0131ra demektir.<\/p>\n<h4>Veri G\u00fcncelleme (Update)<\/h4>\n<p>Mevcut belgeleri de\u011fi\u015ftirmek i\u00e7in <code>updateOne()<\/code>, <code>updateMany()<\/code> ve <code>replaceOne()<\/code> metotlar\u0131 kullan\u0131l\u0131r.<\/p>\n<p>*   <strong><code>updateOne()<\/code>:<\/strong> Belirtilen kriterlere uyan ilk belgeyi g\u00fcnceller.<br \/>\n*   <strong><code>updateMany()<\/code>:<\/strong> Belirtilen kriterlere uyan t\u00fcm belgeleri g\u00fcnceller.<br \/>\n*   <strong><code>replaceOne()<\/code>:<\/strong> Belirtilen kriterlere uyan ilk belgeyi tamamen yeni bir belgeyle de\u011fi\u015ftirir. <code>_id<\/code> alan\u0131 ayn\u0131 kal\u0131r.<\/p>\n<p><strong>G\u00fcncelleme Operat\u00f6rleri:<\/strong><\/p>\n<p>*   <code>$set<\/code>: Bir alan\u0131n de\u011ferini ayarlar veya yeni bir alan ekler.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Ad\u0131 \"Ay\u015fe Y\u0131lmaz\" olan kullan\u0131c\u0131n\u0131n ya\u015f\u0131n\u0131 29 yap ve status alan\u0131n\u0131 \"inactive\" olarak ayarla\n    db.users.updateOne(\n      { name: \"Ay\u015fe Y\u0131lmaz\" },\n      { $set: { age: 29, status: \"inactive\" } }\n    );<\/code><\/pre>\n<p>*   <code>$inc<\/code>: Bir alan\u0131n de\u011ferini belirtilen miktarda art\u0131r\u0131r veya azalt\u0131r.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Fiyat\u0131 1200 olan \u00fcr\u00fcn\u00fcn stok miktar\u0131n\u0131 10 art\u0131r\n    db.products.updateOne(\n      { price: 1200 },\n      { $inc: { stock: 10 } }\n    );<\/code><\/pre>\n<p>*   <code>$unset<\/code>: Bir alan\u0131 belgeden kald\u0131r\u0131r.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Ad\u0131 \"Ali Can\" olan kullan\u0131c\u0131n\u0131n email alan\u0131n\u0131 kald\u0131r\n    db.users.updateOne(\n      { name: \"Ali Can\" },\n      { $unset: { email: \"\" } }\n    );<\/code><\/pre>\n<p>*   <code>$push<\/code>: Bir diziye yeni bir eleman ekler.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Ad\u0131 \"Ay\u015fe Y\u0131lmaz\" olan kullan\u0131c\u0131n\u0131n hobilerine \"yoga\" ekle\n    db.users.updateOne(\n      { name: \"Ay\u015fe Y\u0131lmaz\" },\n      { $push: { hobbies: \"yoga\" } }\n    );<\/code><\/pre>\n<p>*   <code>$pull<\/code>: Bir diziden belirtilen de\u011fere sahip elemanlar\u0131 kald\u0131r\u0131r.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Ad\u0131 \"Ay\u015fe Y\u0131lmaz\" olan kullan\u0131c\u0131n\u0131n hobilerinden \"reading\"i kald\u0131r\n    db.users.updateOne(\n      { name: \"Ay\u015fe Y\u0131lmaz\" },\n      { $pull: { hobbies: \"reading\" } }\n    );<\/code><\/pre>\n<p>*   <code>$addToSet<\/code>: Bir diziye yaln\u0131zca belirtilen eleman dizide yoksa ekler (benzersiz elemanlar i\u00e7in).<\/p>\n<pre><code class=\"language-javascript\">\/\/ Ad\u0131 \"Ali Can\" olan kullan\u0131c\u0131n\u0131n hobilerine \"swimming\"i ekle, e\u011fer yoksa\n    db.users.updateOne(\n      { name: \"Ali Can\" },\n      { $addToSet: { hobbies: \"swimming\" } }\n    );<\/code><\/pre>\n<p><strong>Upsert Se\u00e7ene\u011fi:<\/strong> <code>upsert: true<\/code> se\u00e7ene\u011fi, e\u011fer g\u00fcncelleme kriterlerine uyan bir belge bulunamazsa, yeni bir belge olu\u015fturulmas\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Ad\u0131 \"Mehmet Demir\" olan kullan\u0131c\u0131y\u0131 g\u00fcncelle. Yoksa yeni bir belge olu\u015ftur.\ndb.users.updateOne(\n  { name: \"Mehmet Demir\" },\n  { $set: { age: 35, status: \"active\" } },\n  { upsert: true }\n);<\/code><\/pre>\n<h4>Veri Silme (Delete)<\/h4>\n<p>Belgeleri veya koleksiyonlar\u0131 veri taban\u0131ndan kald\u0131rmak i\u00e7in <code>deleteOne()<\/code>, <code>deleteMany()<\/code> ve <code>drop()<\/code> metotlar\u0131 kullan\u0131l\u0131r.<\/p>\n<p>*   <strong><code>deleteOne()<\/code>:<\/strong> Belirtilen kriterlere uyan ilk belgeyi siler.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Ad\u0131 \"Ay\u015fe Y\u0131lmaz\" olan ilk kullan\u0131c\u0131y\u0131 sil\n    db.users.deleteOne({ name: \"Ay\u015fe Y\u0131lmaz\" });<\/code><\/pre>\n<p>*   <strong><code>deleteMany()<\/code>:<\/strong> Belirtilen kriterlere uyan t\u00fcm belgeleri siler. Kriter bo\u015f (<code>{}<\/code>) verilirse, koleksiyondaki t\u00fcm belgeleri siler.<\/p>\n<pre><code class=\"language-javascript\">\/\/ Ya\u015f\u0131 20'den k\u00fc\u00e7\u00fck t\u00fcm kullan\u0131c\u0131lar\u0131 sil\n    db.users.deleteMany({ age: { $lt: 20 } });\n\n    \/\/ T\u00fcm \u00fcr\u00fcnleri sil\n    db.products.deleteMany({});<\/code><\/pre>\n<p>*   <strong><code>drop()<\/code>:<\/strong> Bir koleksiyonu tamamen siler.<\/p>\n<pre><code class=\"language-javascript\">\/\/ \"products\" koleksiyonunu sil\n    db.products.drop();<\/code><\/pre>\n<p>*   <strong>Veri Taban\u0131n\u0131 Silme:<\/strong><\/p>\n<pre><code class=\"language-javascript\">\/\/ Aktif veri taban\u0131n\u0131 sil\n    db.dropDatabase();<\/code><\/pre>\n<p>    Bu komutu dikkatli kullan\u0131n, geri d\u00f6n\u00fc\u015f\u00fc yoktur.<\/p>\n<h3>\u0130ndeksleme<\/h3>\n<p>\u0130ndeksler, MongoDB&#8217;nin sorgu performans\u0131n\u0131 art\u0131rmak i\u00e7in kulland\u0131\u011f\u0131 \u00f6zel veri yap\u0131lar\u0131d\u0131r. Belirli alanlardaki verilere h\u0131zl\u0131 eri\u015fim sa\u011flayarak sorgular\u0131n daha verimli \u00e7al\u0131\u015fmas\u0131na olanak tan\u0131r. \u0130li\u015fkisel veri tabanlar\u0131ndaki indekslere benzer \u015fekilde \u00e7al\u0131\u015f\u0131r.<\/p>\n<p>*   <strong>Neden \u0130ndeks Kullan\u0131l\u0131r?<\/strong><br \/>\n    *   Sorgu h\u0131z\u0131n\u0131 art\u0131r\u0131r.<br \/>\n    *   S\u0131ralama i\u015flemlerini h\u0131zland\u0131r\u0131r.<br \/>\n    *   Veri taban\u0131n\u0131n genel performans\u0131n\u0131 iyile\u015ftirir.<br \/>\n*   <strong>\u0130ndeks Olu\u015fturma:<\/strong> <code>createIndex()<\/code> metodu ile indeks olu\u015fturulur.<\/p>\n<pre><code class=\"language-javascript\">\/\/ \"name\" alan\u0131 \u00fczerinde artan s\u0131rada tek alan indeksi olu\u015ftur\n    db.users.createIndex({ name: 1 });\n\n    \/\/ \"brand\" ve \"price\" alanlar\u0131 \u00fczerinde bile\u015fik indeks olu\u015ftur\n    db.products.createIndex({ brand: 1, price: -1 });<\/code><\/pre>\n<p>    <code>1<\/code> artan, <code>-1<\/code> azalan s\u0131ra demektir.<br \/>\n*   <strong>\u0130ndeks T\u00fcrleri:<\/strong><br \/>\n    *   <strong>Tek Alan \u0130ndeksi:<\/strong> En basit indeks t\u00fcr\u00fcd\u00fcr. Tek bir alan \u00fczerinde olu\u015fturulur.<br \/>\n    *   <strong>Bile\u015fik \u0130ndeks:<\/strong> Birden fazla alan \u00fczerinde olu\u015fturulur. Sorgular bu alanlar\u0131n kombinasyonlar\u0131n\u0131 i\u00e7erdi\u011finde faydal\u0131d\u0131r.<br \/>\n    *   <strong>Multikey \u0130ndeks:<\/strong> Dizi i\u00e7eren alanlar \u00fczerinde olu\u015fturulur. Dizideki her eleman i\u00e7in ayr\u0131 bir indeks giri\u015fi olu\u015fturulur.<br \/>\n    *   <strong>Text \u0130ndeks:<\/strong> Metin tabanl\u0131 arama yapmak i\u00e7in kullan\u0131l\u0131r.<br \/>\n    *   <strong>Geospatial \u0130ndeks:<\/strong> Co\u011frafi konum tabanl\u0131 sorgular i\u00e7in kullan\u0131l\u0131r.<br \/>\n*   <strong>\u0130ndeksleri Listeleme:<\/strong><\/p>\n<pre><code class=\"language-javascript\">db.users.getIndexes();<\/code><\/pre>\n<p>*   <strong>\u0130ndeksi Silme:<\/strong><\/p>\n<pre><code class=\"language-javascript\">\/\/ \"name_1\" adl\u0131 indeksi sil\n    db.users.dropIndex(\"name_1\");\n\n    \/\/ T\u00fcm indeksleri sil (varsay\u0131lan _id indeksi hari\u00e7)\n    db.users.dropIndexes();<\/code><\/pre>\n<p>*   <strong>Sorgu Plan\u0131n\u0131 Anlama (<code>explain()<\/code>):<\/strong> Bir sorgunun nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 ve indeksleri kullan\u0131p kullanmad\u0131\u011f\u0131n\u0131 g\u00f6rmek i\u00e7in <code>explain()<\/code> metodunu kullanabilirsiniz.<\/p>\n<pre><code class=\"language-javascript\">db.users.find({ age: { $gt: 30 } }).explain(\"executionStats\");<\/code><\/pre>\n<p>    Bu, sorgunun performans\u0131n\u0131 analiz etmenize yard\u0131mc\u0131 olur.<\/p>\n<h3>Agregasyon \u00c7er\u00e7evesi (Aggregation Framework)<\/h3>\n<p>Agregasyon \u00e7er\u00e7evesi, MongoDB&#8217;de karma\u015f\u0131k veri i\u015fleme ve analiz g\u00f6revlerini ger\u00e7ekle\u015ftirmek i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Bir dizi &#8220;a\u015fama&#8221; (pipeline stages) kullanarak belgeleri d\u00f6n\u00fc\u015ft\u00fcrmenize, filtrelemenize, grupland\u0131rman\u0131za ve \u00f6zetlemenize olanak tan\u0131r.<\/p>\n<p>*   <strong>Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/strong> Agregasyon, bir dizi ard\u0131\u015f\u0131k a\u015famadan olu\u015fan bir boru hatt\u0131 (pipeline) \u015feklinde \u00e7al\u0131\u015f\u0131r. Her a\u015fama, \u00f6nceki a\u015faman\u0131n \u00e7\u0131kt\u0131s\u0131n\u0131 al\u0131r, \u00fczerinde bir i\u015flem yapar ve bir sonraki a\u015famaya iletir.<br \/>\n*   <strong>Yayg\u0131n Agregasyon A\u015famalar\u0131:<\/strong><br \/>\n    *   <code>$match<\/code>: Belgeleri filtreler (sorguya benzer).<br \/>\n    *   <code>$project<\/code>: Belge yap\u0131s\u0131n\u0131 yeniden \u015fekillendirir, alanlar\u0131 dahil eder\/hari\u00e7 tutar, yeni alanlar olu\u015fturur.<br \/>\n    *   <code>$group<\/code>: Belgeleri belirli bir anahtara g\u00f6re grupland\u0131r\u0131r ve grupland\u0131r\u0131lm\u0131\u015f veriler \u00fczerinde agregasyon i\u015flemleri (say\u0131, toplam, ortalama vb.) yapar.<br \/>\n    *   <code>$sort<\/code>: Belgeleri s\u0131ralar.<br \/>\n    *   <code>$limit<\/code>: Belge say\u0131s\u0131n\u0131 s\u0131n\u0131rlar.<br \/>\n    *   <code>$skip<\/code>: Belirli say\u0131da belgeyi atlar.<br \/>\n    *   <code>$unwind<\/code>: Dizi alanlar\u0131n\u0131 tek tek belgelere ay\u0131r\u0131r.<br \/>\n    *   <code>$lookup<\/code>: Ba\u015fka bir koleksiyondan belge birle\u015ftirmek i\u00e7in (sol d\u0131\u015f birle\u015fime benzer).<\/p>\n<p><strong>\u00d6rnek Agregasyon Sorgusu:<\/strong><\/p>\n<p>Kullan\u0131c\u0131lar\u0131n ya\u015f ortalamas\u0131n\u0131 ve her ya\u015f grubundaki kullan\u0131c\u0131 say\u0131s\u0131n\u0131 bulal\u0131m:<\/p>\n<pre><code class=\"language-javascript\">db.users.aggregate([\n  {\n    $match: { status: \"active\" } \/\/ Sadece aktif kullan\u0131c\u0131lar\u0131 filtrele\n  },\n  {\n    $group: { \/\/ Ya\u015fa g\u00f6re grupland\u0131r\n      _id: \"$age\", \/\/ Gruplama anahtar\u0131 \"age\" alan\u0131\n      count: { $sum: 1 }, \/\/ Her gruptaki belge say\u0131s\u0131n\u0131 say\n      averageAge: { $avg: \"$age\" } \/\/ Her gruptaki ya\u015f ortalamas\u0131n\u0131 hesapla (bu \u00f6rnekte _id ile ayn\u0131 olacakt\u0131r)\n    }\n  },\n  {\n    $sort: { _id: 1 } \/\/ Ya\u015f grubuna g\u00f6re s\u0131rala\n  },\n  {\n    $project: { \/\/ Sadece belirli alanlar\u0131 g\u00f6ster\n      _id: 0, \/\/ _id alan\u0131n\u0131 gizle\n      ageGroup: \"$_id\", \/\/ _id alan\u0131n\u0131 \"ageGroup\" olarak yeniden adland\u0131r\n      userCount: \"$count\",\n      avgAge: \"$averageAge\"\n    }\n  }\n]);<\/code><\/pre>\n<p>Bu \u00f6rnek, aktif kullan\u0131c\u0131lar\u0131 filtreler, ya\u015flar\u0131na g\u00f6re grupland\u0131r\u0131r, her ya\u015f grubundaki kullan\u0131c\u0131 say\u0131s\u0131n\u0131 ve ortalama ya\u015f\u0131n\u0131 hesaplar, sonu\u00e7lar\u0131 ya\u015f grubuna g\u00f6re s\u0131ralar ve son olarak \u00e7\u0131kt\u0131 format\u0131n\u0131 d\u00fczenler.<\/p>\n<h3>Replikasyon (Replication)<\/h3>\n<p>Replikasyon, verilerinizi birden fazla sunucuya (replika seti) kopyalayarak veri taban\u0131n\u0131z\u0131n y\u00fcksek eri\u015filebilirli\u011fini ve veri yedeklili\u011fini sa\u011flayan bir \u00f6zelliktir. Bir replika seti, birincil (primary) bir d\u00fc\u011f\u00fcmden ve bir veya daha fazla ikincil (secondary) d\u00fc\u011f\u00fcmden olu\u015fur.<\/p>\n<p>*   <strong>Amac\u0131:<\/strong><br \/>\n    *   <strong>Y\u00fcksek Eri\u015filebilirlik:<\/strong> Birincil d\u00fc\u011f\u00fcm ar\u0131zaland\u0131\u011f\u0131nda, ikincil d\u00fc\u011f\u00fcmlerden biri otomatik olarak yeni bir birincil d\u00fc\u011f\u00fcm olur, b\u00f6ylece kesintisiz hizmet sa\u011flan\u0131r.<br \/>\n    *   <strong>Veri Yedeklili\u011fi:<\/strong> Verilerinizin birden fazla kopyas\u0131 oldu\u011fu i\u00e7in donan\u0131m ar\u0131zalar\u0131 veya felaket durumlar\u0131nda veri kayb\u0131 riski azal\u0131r.<br \/>\n    *   <strong>Okuma \u00d6l\u00e7eklendirmesi:<\/strong> Okuma i\u015flemleri ikincil d\u00fc\u011f\u00fcmlere y\u00f6nlendirilerek birincil d\u00fc\u011f\u00fcm\u00fcn \u00fczerindeki y\u00fck azalt\u0131labilir.<\/p>\n<p>*   <strong>Replica Set Yap\u0131s\u0131:<\/strong><br \/>\n    *   <strong>Primary:<\/strong> T\u00fcm yazma i\u015flemlerini kabul eden d\u00fc\u011f\u00fcmd\u00fcr. Okuma i\u015flemleri de yapabilir.<br \/>\n    *   <strong>Secondary:<\/strong> Birincil d\u00fc\u011f\u00fcmdeki verilerin kopyalar\u0131n\u0131 tutar ve yazma i\u015flemlerini birincil d\u00fc\u011f\u00fcmden \u00e7o\u011falt\u0131r. Okuma i\u015flemleri i\u00e7in kullan\u0131labilir.<\/p>\n<p>*   <strong>Kurulum Ad\u0131mlar\u0131 (Basit\u00e7e):<\/strong><br \/>\n    1.  Her bir sunucuda <code>mongod<\/code>&#8216;u <code>replica set<\/code> ad\u0131yla ba\u015flat\u0131n (\u00f6rne\u011fin, <code>mongod --replSet rs0 --port 27017 --dbpath \/data\/db<\/code>).<br \/>\n    2.  <code>mongosh<\/code> ile birincil d\u00fc\u011f\u00fcme ba\u011flan\u0131n.<br \/>\n    3.  Replica setini ba\u015flat\u0131n: <code>rs.initiate({ _id: \"rs0\", members: [{ _id: 0, host: \"server1:27017\" }] })<\/code>.<br \/>\n    4.  Di\u011fer ikincil d\u00fc\u011f\u00fcmleri ekleyin: <code>rs.add(\"server2:27017\")<\/code>.<\/p>\n<h3>Sharding (Par\u00e7alama)<\/h3>\n<p>Sharding, b\u00fcy\u00fck veri setlerini ve y\u00fcksek yazma\/okuma y\u00fcklerini y\u00f6netmek i\u00e7in MongoDB&#8217;nin yatay \u00f6l\u00e7eklendirme \u00e7\u00f6z\u00fcm\u00fcd\u00fcr. Verileri birden fazla sunucuya (shard) da\u011f\u0131tarak tek bir sunucunun kapasite s\u0131n\u0131rlamalar\u0131n\u0131 a\u015fman\u0131z\u0131 sa\u011flar.<\/p>\n<p>*   <strong>Amac\u0131:<\/strong><br \/>\n    *   <strong>Yatay \u00d6l\u00e7eklendirme:<\/strong> Veri taban\u0131n\u0131n kapasitesini art\u0131rmak i\u00e7in yeni sunucular eklemeyi sa\u011flar.<br \/>\n    *   <strong>Y\u00fcksek Performans:<\/strong> Sorgu y\u00fck\u00fcn\u00fc birden fazla sunucuya da\u011f\u0131tarak daha h\u0131zl\u0131 yan\u0131t s\u00fcreleri elde edilir.<br \/>\n    *   <strong>B\u00fcy\u00fck Veri Setleri:<\/strong> Petabaytlarca veriyi depolama ve i\u015fleme yetene\u011fi sunar.<\/p>\n<p>*   <strong>Sharding Bile\u015fenleri:<\/strong><br \/>\n    *   <strong>Shards (Par\u00e7alar):<\/strong> Verilerin bir k\u0131sm\u0131n\u0131 depolayan ve i\u015fleyen ba\u011f\u0131ms\u0131z <code>mongod<\/code> \u00f6rnekleri veya replica setleridir.<br \/>\n    *   <strong>Config Servers (Yap\u0131land\u0131rma Sunucular\u0131):<\/strong> Cluster&#8217;\u0131n meta verilerini (hangi verinin hangi shard&#8217;da oldu\u011fu gibi) depolar.<br \/>\n    *   <strong><code>mongos<\/code> (Router):<\/strong> Uygulama ile shard&#8217;lar aras\u0131nda bir aray\u00fcz g\u00f6revi g\u00f6r\u00fcr. Sorgular\u0131 do\u011fru shard&#8217;lara y\u00f6nlendirir ve sonu\u00e7lar\u0131 birle\u015ftirir.<\/p>\n<p>*   <strong>Shard Key:<\/strong> Verilerin hangi shard&#8217;a da\u011f\u0131t\u0131laca\u011f\u0131n\u0131 belirleyen bir veya daha fazla alandan olu\u015fan bir anahtard\u0131r. Do\u011fru shard key se\u00e7imi, sharding performans\u0131n\u0131n anahtar\u0131d\u0131r.<\/p>\n<h3>G\u00fcvenlik Temelleri<\/h3>\n<p>Veri taban\u0131 g\u00fcvenli\u011fi kritik \u00f6neme sahiptir. MongoDB, verilerinizi korumak i\u00e7in \u00e7e\u015fitli g\u00fcvenlik \u00f6zellikleri sunar.<\/p>\n<p>*   <strong>Kimlik Do\u011frulama (Authentication):<\/strong> Kullan\u0131c\u0131lar\u0131n veri taban\u0131na eri\u015fimini do\u011frular. SCRAM (Salted Challenge Response Authentication Mechanism) ve x.509 sertifikalar\u0131 gibi y\u00f6ntemler kullan\u0131l\u0131r.<br \/>\n    *   MongoDB&#8217;yi yetkilendirme ile ba\u015flatmak i\u00e7in <code>mongod --auth<\/code> komutunu kullan\u0131n.<br \/>\n    *   Kullan\u0131c\u0131 olu\u015fturma: <code>db.createUser({ user: \"admin\", pwd: \"password\", roles: [{ role: \"root\", db: \"admin\" }] })<\/code>.<br \/>\n*   <strong>Yetkilendirme (Authorization &#8211; RBAC):<\/strong> Kullan\u0131c\u0131lara belirli roller atayarak hangi i\u015flemleri hangi veri tabanlar\u0131 ve koleksiyonlar \u00fczerinde yapabileceklerini kontrol eder.<br \/>\n    *   \u00d6nceden tan\u0131mlanm\u0131\u015f roller (<code>read<\/code>, <code>readWrite<\/code>, <code>dbAdmin<\/code>, <code>clusterAdmin<\/code> vb.) veya \u00f6zel roller olu\u015fturulabilir.<br \/>\n*   <strong>A\u011f \u015eifreleme (TLS\/SSL):<\/strong> \u0130stemci ile sunucu aras\u0131ndaki ileti\u015fimin \u015fifrelenmesini sa\u011flar, b\u00f6ylece veriler a\u011f \u00fczerinden g\u00fcvenli bir \u015fekilde aktar\u0131l\u0131r.<br \/>\n*   <strong>A\u011f Eri\u015fimi K\u0131s\u0131tlamalar\u0131:<\/strong> G\u00fcvenlik duvarlar\u0131 (firewall) kullanarak sadece belirli IP adreslerinden veya a\u011flardan eri\u015fime izin verilmelidir. MongoDB&#8217;nin varsay\u0131lan portu 27017&#8217;dir.<br \/>\n*   <strong>G\u00fcnl\u00fck Kay\u0131tlar\u0131 (Auditing):<\/strong> Veri taban\u0131 \u00fczerindeki \u00f6nemli olaylar\u0131 (giri\u015f denemeleri, sorgular, g\u00fcncellemeler) kaydetmek, g\u00fcvenlik ihlallerini tespit etmek i\u00e7in \u00f6nemlidir.<\/p>\n<h3>Yedekleme ve Geri Y\u00fckleme<\/h3>\n<p>Veri kayb\u0131n\u0131 \u00f6nlemek ve felaket kurtarma senaryolar\u0131na haz\u0131rlanmak i\u00e7in d\u00fczenli yedeklemeler yapmak \u00e7ok \u00f6nemlidir.<\/p>\n<p>*   <strong><code>mongodump<\/code>:<\/strong> MongoDB veri taban\u0131n\u0131n veya belirli koleksiyonlar\u0131n ikili (binary) yede\u011fini al\u0131r.<\/p>\n<pre><code class=\"language-bash\">mongodump --db mydatabase --out \/path\/to\/backup\/directory<\/code><\/pre>\n<p>*   <strong><code>mongorestore<\/code>:<\/strong> <code>mongodump<\/code> ile al\u0131nan yedekleri geri y\u00fckler.<\/p>\n<pre><code class=\"language-bash\">mongorestore --db mydatabase --drop \/path\/to\/backup\/directory\/mydatabase<\/code><\/pre>\n<p>    <code>--drop<\/code> se\u00e7ene\u011fi, geri y\u00fcklemeden \u00f6nce mevcut koleksiyonlar\u0131 siler.<br \/>\n*   <strong>Dosya Sistemi Anl\u0131k G\u00f6r\u00fcnt\u00fcleri (Filesystem Snapshots):<\/strong> Veri taban\u0131n\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 sunucunun dosya sistemi anl\u0131k g\u00f6r\u00fcnt\u00fclerini almak da bir yedekleme stratejisi olabilir. Bu y\u00f6ntem, \u00f6zellikle b\u00fcy\u00fck veri tabanlar\u0131 i\u00e7in h\u0131zl\u0131 ve verimli olabilir.<\/p>\n<h3>MongoDB Atlas<\/h3>\n<p>MongoDB Atlas, MongoDB&#8217;nin bulut tabanl\u0131, tam olarak y\u00f6netilen bir hizmetidir. AWS, Google Cloud ve Azure gibi b\u00fcy\u00fck bulut sa\u011flay\u0131c\u0131lar\u0131nda \u00e7al\u0131\u015f\u0131r.<\/p>\n<p>*   <strong>Avantajlar\u0131:<\/strong><br \/>\n    *   <strong>Kolay Kurulum ve Y\u00f6netim:<\/strong> Altyap\u0131 y\u00f6netimiyle u\u011fra\u015fmadan birka\u00e7 t\u0131klamayla bir MongoDB k\u00fcmesi olu\u015fturulabilir ve y\u00f6netilebilir.<br \/>\n    *   <strong>Otomatik \u00d6l\u00e7eklendirme:<\/strong> \u0130htiya\u00e7lara g\u00f6re otomatik olarak \u00f6l\u00e7eklenebilir, b\u00f6ylece performans sorunlar\u0131 ya\u015fanmaz.<br \/>\n    *   <strong>Y\u00fcksek Eri\u015filebilirlik ve Yedekleme:<\/strong> Yerle\u015fik replikasyon ve otomatik yedekleme \u00f6zellikleriyle veri g\u00fcvenli\u011fi ve eri\u015filebilirli\u011fi sa\u011flan\u0131r.<br \/>\n    *   <strong>Geli\u015fmi\u015f \u0130zleme ve Analiz:<\/strong> Performans metrikleri, sorgu analizleri ve uyar\u0131lar sunar.<br \/>\n    *   <strong>G\u00fcvenlik:<\/strong> Kapsaml\u0131 g\u00fcvenlik \u00f6zellikleri (a\u011f izolasyonu, \u015fifreleme, RBAC) ile veriler korunur.<br \/>\n    *   <strong>Sunucusuz (Serverless) Se\u00e7enekler:<\/strong> Daha k\u00fc\u00e7\u00fck ve dinamik i\u015f y\u00fckleri i\u00e7in sunucusuz veri taban\u0131 se\u00e7enekleri sunar.<\/p>\n<p>MongoDB Atlas, \u00f6zellikle geli\u015ftiricilerin altyap\u0131 yerine uygulama geli\u015ftirmeye odaklanmas\u0131n\u0131 sa\u011flayan modern bir \u00e7\u00f6z\u00fcmd\u00fcr.<\/p>\n<h3>En \u0130yi Uygulamalar<\/h3>\n<p>MongoDB&#8217;den en iyi \u015fekilde yararlanmak i\u00e7in baz\u0131 en iyi uygulamalar\u0131 g\u00f6z \u00f6n\u00fcnde bulundurmak \u00f6nemlidir:<\/p>\n<p>*   <strong>\u015eema Tasar\u0131m\u0131:<\/strong><br \/>\n    *   <strong>G\u00f6mme (Embedding) vs. Referanslama (Referencing):<\/strong> Verileri tek bir belgede g\u00f6mmek mi yoksa ayr\u0131 belgelerde saklay\u0131p referanslarla ba\u011flamak m\u0131 gerekti\u011fine karar verin.<br \/>\n        *   <strong>G\u00f6mme:<\/strong> Veriler birlikte eri\u015fildi\u011finde ve boyutu s\u0131n\u0131rl\u0131 oldu\u011funda daha iyi performans sa\u011flar. Tek bir sorgu ile t\u00fcm ilgili verilere ula\u015f\u0131l\u0131r.<br \/>\n        *   <strong>Referanslama:<\/strong> Veriler ayr\u0131 ayr\u0131 de\u011fi\u015fti\u011finde, ili\u015fkiler \u00e7ok-\u00e7ok oldu\u011funda veya g\u00f6m\u00fcl\u00fc veri \u00e7ok b\u00fcy\u00fcd\u00fc\u011f\u00fcnde tercih edilir. Daha fazla sorgu gerektirebilir.<br \/>\n    *   <strong>Veri B\u00fcy\u00fckl\u00fc\u011f\u00fc:<\/strong> Belgelerinizi \u00e7ok b\u00fcy\u00fck yapmaktan ka\u00e7\u0131n\u0131n (16MB belge boyutu s\u0131n\u0131r\u0131).<br \/>\n*   <strong>\u0130ndeksleme Stratejisi:<\/strong><br \/>\n    *   S\u0131k\u00e7a sorgulanan alanlara, s\u0131ralama ve grupland\u0131rma yap\u0131lan alanlara indeks ekleyin.<br \/>\n    *   <code>explain()<\/code> kullanarak sorgular\u0131n\u0131z\u0131n indeksleri do\u011fru kullan\u0131p kullanmad\u0131\u011f\u0131n\u0131 kontrol edin.<br \/>\n    *   \u00c7ok fazla indeks olu\u015fturmaktan ka\u00e7\u0131n\u0131n, \u00e7\u00fcnk\u00fc indeksler yazma i\u015flemlerini yava\u015flat\u0131r ve disk alan\u0131 kaplar.<br \/>\n*   <strong>Sorgu Optimizasyonu:<\/strong><br \/>\n    *   Yaln\u0131zca ihtiyac\u0131n\u0131z olan alanlar\u0131 getirmek i\u00e7in projeksiyon kullan\u0131n.<br \/>\n    *   <code>limit()<\/code> ve <code>skip()<\/code> kullan\u0131rken dikkatli olun, \u00f6zellikle b\u00fcy\u00fck <code>skip<\/code> de\u011ferleri performans sorunlar\u0131na yol a\u00e7abilir.<br \/>\n    *   <code>$or<\/code> sorgular\u0131n\u0131 optimize etmek i\u00e7in uygun indeksler kullan\u0131n.<br \/>\n*   <strong>Ba\u011flant\u0131 Havuzu (Connection Pooling):<\/strong> Uygulamalar\u0131n\u0131zda veri taban\u0131 ba\u011flant\u0131 havuzu kullanarak ba\u011flant\u0131 a\u00e7ma\/kapama maliyetini azalt\u0131n ve performans\u0131 art\u0131r\u0131n.<br \/>\n*   <strong>Hata Y\u00f6netimi ve Loglama:<\/strong> Uygulamalar\u0131n\u0131zda ve MongoDB sunucusunda hata y\u00f6netimi ve kapsaml\u0131 g\u00fcnl\u00fck kayd\u0131 uygulay\u0131n.<br \/>\n*   <strong>S\u00fcr\u00fcm G\u00fcncellemeleri:<\/strong> MongoDB&#8217;nin yeni s\u00fcr\u00fcmlerini takip edin ve g\u00fcncel kal\u0131n. Yeni s\u00fcr\u00fcmler genellikle performans iyile\u015ftirmeleri ve yeni \u00f6zellikler sunar.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>MongoDB, esnek \u015femas\u0131, y\u00fcksek performans\u0131 ve yatay \u00f6l\u00e7eklenebilirlik yetenekleri ile modern uygulama geli\u015ftirmenin vazge\u00e7ilmez ara\u00e7lar\u0131ndan biridir. Bu rehberde, MongoDB&#8217;nin temel kavramlar\u0131ndan ba\u015flayarak kurulumuna, CRUD i\u015flemlerine, indekslemeye, agregasyona, replikasyon ve sharding gibi ileri seviye \u00f6zelliklerine ve g\u00fcvenlik konular\u0131na de\u011findik.<\/p>\n<p>MongoDB&#8217;nin sundu\u011fu bu g\u00fc\u00e7l\u00fc \u00f6zellikler, geli\u015ftiricilere b\u00fcy\u00fck veri setlerini y\u00f6netme, y\u00fcksek trafikli uygulamalar olu\u015fturma ve h\u0131zla de\u011fi\u015fen i\u015f gereksinimlerine adapte olma esnekli\u011fi sa\u011flar. Uygulaman\u0131z\u0131n ihtiya\u00e7lar\u0131na uygun bir \u015fekilde MongoDB&#8217;yi kullanarak, veri taban\u0131 y\u00f6netimini daha verimli ve etkili hale getirebilirsiniz. Unutmay\u0131n, en iyi \u00f6\u011frenme yolu pratik yapmakt\u0131r. MongoDB kabu\u011funda komutlar\u0131 denemekten ve kendi projelerinizde kullanmaktan \u00e7ekinmeyin.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"MongoDB Tutorial: Kapsaml\u0131 Bir Rehber\nMongoDB, modern uygulamalar\u0131n h\u0131zla de\u011fi\u015fen veri ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131lamak \u00fczere tasarlanm\u0131\u015f, a\u00e7\u0131","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[676],"tags":[],"class_list":{"0":"post-31982","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-mongodb","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>MongoDB Tutorial: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"MongoDB Tutorial: Kapsaml\u0131 Bir Rehber\" \/>\n<meta property=\"og:description\" content=\"MongoDB Tutorial: Kapsaml\u0131 Bir Rehber MongoDB, modern uygulamalar\u0131n h\u0131zla de\u011fi\u015fen veri ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131lamak \u00fczere tasarlanm\u0131\u015f, a\u00e7\u0131\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-16T06:41:11+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"MongoDB Tutorial: Kapsaml\u0131 Bir Rehber\",\"datePublished\":\"2025-10-16T06:41:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/\"},\"wordCount\":3125,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"MongoDB\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/\",\"name\":\"MongoDB Tutorial: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-16T06:41:11+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"MongoDB Tutorial: Kapsaml\u0131 Bir Rehber\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"MongoDB Tutorial: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"MongoDB Tutorial: Kapsaml\u0131 Bir Rehber","og_description":"MongoDB Tutorial: Kapsaml\u0131 Bir Rehber MongoDB, modern uygulamalar\u0131n h\u0131zla de\u011fi\u015fen veri ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131lamak \u00fczere tasarlanm\u0131\u015f, a\u00e7\u0131","og_url":"https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-16T06:41:11+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"20 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"MongoDB Tutorial: Kapsaml\u0131 Bir Rehber","datePublished":"2025-10-16T06:41:11+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/"},"wordCount":3125,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["MongoDB"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/","name":"MongoDB Tutorial: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-16T06:41:11+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/mongodb-tutorial-kapsamli-bir-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"MongoDB Tutorial: Kapsaml\u0131 Bir Rehber"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31982","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=31982"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31982\/revisions"}],"predecessor-version":[{"id":31983,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31982\/revisions\/31983"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31982"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31982"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31982"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}