{"id":35315,"date":"2025-11-28T06:31:39","date_gmt":"2025-11-28T03:31:39","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/mongodb-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/"},"modified":"2025-11-28T06:31:39","modified_gmt":"2025-11-28T03:31:39","slug":"mongodb-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/mongodb-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/","title":{"rendered":"MongoDB Geli\u015ftiricileri \u0130\u00e7in Kapsaml\u0131 Rehber: Kod \u00d6rnekleriyle"},"content":{"rendered":"<p><body><\/p>\n<p>Modern uygulama geli\u015ftirmenin h\u0131zla de\u011fi\u015fen d\u00fcnyas\u0131nda, veri y\u00f6netimi her zamankinden daha kritik hale gelmi\u015ftir. Peki, esnek, \u00f6l\u00e7eklenebilir ve y\u00fcksek performansl\u0131 bir veritaban\u0131 \u00e7\u00f6z\u00fcm\u00fc aray\u0131\u015f\u0131n\u0131zda hangi teknolojiye g\u00fcvenmelisiniz? MongoDB, sundu\u011fu dok\u00fcman tabanl\u0131 yakla\u015f\u0131mla geli\u015ftiricilere e\u015fsiz bir \u00f6zg\u00fcrl\u00fck ve h\u0131z sunarak bu sorunun cevab\u0131 olmaya devam ediyor. Bu rehberde, MongoDB&#8217;nin temel prensiplerinden ileri d\u00fczey kullan\u0131m senaryolar\u0131na kadar her \u015feyi ad\u0131m ad\u0131m, pratik kod \u00f6rnekleriyle ke\u015ffedece\u011fiz. Art\u0131k geleneksel veritaban\u0131 k\u0131s\u0131tlamalar\u0131na elveda deme zaman\u0131!<\/p>\n<p>Veritaban\u0131 teknolojileri d\u00fcnyas\u0131, ili\u015fkisel veritabanlar\u0131n\u0131n (RDBMS) on y\u0131llarca s\u00fcren hakimiyetinin ard\u0131ndan, yeni nesil ihtiya\u00e7lara cevap veren NoSQL \u00e7\u00f6z\u00fcmleriyle zenginle\u015fti. Bu \u00e7\u00f6z\u00fcmler aras\u0131nda MongoDB, \u00f6zellikle geli\u015ftiricilerin g\u00f6zdesi haline gelmi\u015f, esnek ve \u00f6l\u00e7eklenebilir bir dok\u00fcman tabanl\u0131 veritaban\u0131 sistemi olarak \u00f6ne \u00e7\u0131kmaktad\u0131r. Geleneksel SQL veritabanlar\u0131n\u0131n aksine, MongoDB verileri tablolar ve sat\u0131rlar yerine, JSON benzeri BSON (Binary JSON) format\u0131ndaki dok\u00fcmanlar halinde depolar. Bu yakla\u015f\u0131m, karma\u015f\u0131k veri yap\u0131lar\u0131n\u0131 y\u00f6netmeyi, uygulama kodunuzla do\u011frudan uyumlu bir \u015fekilde \u00e7al\u0131\u015fmay\u0131 ve \u015fema esnekli\u011fini sa\u011flamay\u0131 kolayla\u015ft\u0131r\u0131r. \u00d6rne\u011fin, bir kullan\u0131c\u0131 profilinde her kullan\u0131c\u0131n\u0131n farkl\u0131 alanlara sahip olabilece\u011fi senaryolarda, MongoDB&#8217;nin \u015femas\u0131z yap\u0131s\u0131 b\u00fcy\u00fck bir avantaj sa\u011flar. Geli\u015ftiriciler, her seferinde bir \u015fema g\u00fcncellemesi yapmak zorunda kalmadan yeni alanlar ekleyebilir veya mevcut olanlar\u0131 de\u011fi\u015ftirebilirler.<\/p>\n<p>MongoDB&#8217;nin geli\u015ftiriciler aras\u0131nda pop\u00fclaritesinin artmas\u0131n\u0131n temel nedenlerinden biri de onun y\u00fcksek performans\u0131 ve \u00f6l\u00e7eklenebilirlik yetenekleridir. \u00d6zellikle b\u00fcy\u00fck veri k\u00fcmeleri ve y\u00fcksek trafikli uygulamalar s\u00f6z konusu oldu\u011funda, MongoDB&#8217;nin sharding (veri par\u00e7alama) ve replikasyon (veri kopyalama) \u00f6zellikleri sayesinde yatay \u00f6l\u00e7eklenme kolayca sa\u011flanabilir. Bu, uygulaman\u0131z\u0131n milyonlarca kullan\u0131c\u0131ya veya petabaytlarca veriye ula\u015fsa bile sorunsuz \u00e7al\u0131\u015fmaya devam edebilece\u011fi anlam\u0131na gelir. Ayr\u0131ca, geli\u015ftiriciler i\u00e7in \u00f6\u011frenme e\u011frisi nispeten d\u00fc\u015f\u00fckt\u00fcr; \u00e7\u00fcnk\u00fc veri manip\u00fclasyonu ve sorgulama dili, JavaScript veya Python gibi pop\u00fcler programlama dillerine olduk\u00e7a benzer bir yap\u0131ya sahiptir. Bu durum, \u00f6zellikle web geli\u015ftirme d\u00fcnyas\u0131nda s\u0131kl\u0131kla tercih edilen Node.js veya Python tabanl\u0131 uygulamalarla MongoDB entegrasyonunu son derece do\u011fal k\u0131lar.<\/p>\n<p>Di\u011fer yandan, MongoDB&#8217;nin zengin sorgulama dili, karma\u015f\u0131k veri analizleri yapabilme yetene\u011fi sunar. Aggregation Framework gibi g\u00fc\u00e7l\u00fc ara\u00e7lar sayesinde, veriler \u00fczerinde grupland\u0131rma, filtreleme, d\u00f6n\u00fc\u015ft\u00fcrme ve birle\u015ftirme gibi i\u015flemleri veritaban\u0131 seviyesinde ger\u00e7ekle\u015ftirebilirsiniz. Bu, uygulama katman\u0131ndaki y\u00fck\u00fc azalt\u0131rken veri i\u015fleme h\u0131z\u0131n\u0131 art\u0131r\u0131r. Geli\u015ftiriciler, bu sayede daha performansl\u0131 ve optimize edilmi\u015f uygulamalar geli\u015ftirebilirler. \u00d6rne\u011fin, bir e-ticaret uygulamas\u0131nda ayl\u0131k sat\u0131\u015f raporlar\u0131 olu\u015fturmak veya belirli \u00fcr\u00fcn kategorilerinin performans\u0131n\u0131 izlemek i\u00e7in Aggregation Framework m\u00fckemmel bir \u00e7\u00f6z\u00fcmd\u00fcr. T\u00fcm bu \u00f6zellikler bir araya geldi\u011finde, MongoDB modern, dinamik ve veri yo\u011fun uygulamalar geli\u015ftirmek isteyen her geli\u015ftirici i\u00e7in vazge\u00e7ilmez bir ara\u00e7 haline gelmektedir. \u0130ster yeni ba\u015flayan ister deneyimli bir geli\u015ftirici olun, MongoDB&#8217;nin sundu\u011fu esneklik ve g\u00fc\u00e7, projelerinizi bir sonraki seviyeye ta\u015f\u0131yacak potansiyele sahiptir.<\/p>\n<h3>MongoDB&#8217;nin Temel Kavramlar\u0131: Dok\u00fcmanlar, Koleksiyonlar ve Veritabanlar\u0131<\/h3>\n<p>MongoDB&#8217;nin d\u00fcnyas\u0131na ad\u0131m atarken, geleneksel ili\u015fkisel veritabanlar\u0131ndan farkl\u0131 bir terminolojiyle kar\u015f\u0131la\u015f\u0131r\u0131z. Ancak endi\u015felenmeyin, bu kavramlar olduk\u00e7a sezgiseld\u0131r ve k\u0131sa s\u00fcrede al\u0131\u015facaks\u0131n\u0131z. MongoDB&#8217;nin yap\u0131 ta\u015flar\u0131 \u00fc\u00e7 ana \u00f6\u011feden olu\u015fur: Dok\u00fcmanlar, Koleksiyonlar ve Veritabanlar\u0131. Bu hiyerar\u015fi, verilerin nas\u0131l organize edildi\u011fini ve sakland\u0131\u011f\u0131n\u0131 anlamak i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<p>\u00d6ncelikle <strong>Dok\u00fcmanlar<\/strong> ile ba\u015flayal\u0131m. MongoDB&#8217;deki dok\u00fcmanlar, verilerin temel birimleridir ve ili\u015fkisel veritabanlar\u0131ndaki sat\u0131rlara benzetilebilirler, ancak \u00e7ok daha esnektirler. Her dok\u00fcman, alan ve de\u011fer \u00e7iftlerinden olu\u015fan bir yap\u0131d\u0131r ve JSON (JavaScript Object Notation) format\u0131na benzer bir \u015fekilde BSON (Binary JSON) olarak saklan\u0131r. BSON, JSON&#8217;\u0131n bir ikili temsilidir ve ek veri tiplerini (tarih, ikili veri vb.) desteklerken daha h\u0131zl\u0131 i\u015fleme imkan\u0131 sunar. \u00d6rne\u011fin, bir kullan\u0131c\u0131 dok\u00fcman\u0131 \u015fu \u015fekilde g\u00f6r\u00fcnebilir:<\/p>\n<pre><code>\n{\n  \"_id\": ObjectId(\"654a9d28c7f2b1d0e8a7b3c4\"),\n  \"ad\": \"Ali\",\n  \"soyad\": \"Demir\",\n  \"eposta\": \"ali.demir@example.com\",\n  \"adres\": {\n    \"sokak\": \"Ana Cad. 123\",\n    \"sehir\": \"Ankara\",\n    \"postaKodu\": \"06000\"\n  },\n  \"ilgiAlanlari\": [\"programlama\", \"seyahat\", \"kitap okuma\"],\n  \"kayitTarihi\": ISODate(\"2023-11-07T10:00:00Z\")\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, bir dok\u00fcman i\u00e7 i\u00e7e ge\u00e7mi\u015f dok\u00fcmanlar (<code>adres<\/code> alan\u0131) ve diziler (<code>ilgiAlanlari<\/code> alan\u0131) i\u00e7erebilir. Bu, karma\u015f\u0131k ve hiyerar\u015fik verileri tek bir birimde depolaman\u0131za olanak tan\u0131r ve b\u00f6ylece ili\u015fkisel veritabanlar\u0131ndaki JOIN i\u015flemlerinin gereklili\u011fini azalt\u0131r. Her dok\u00fcman\u0131n benzersiz bir <code>_id<\/code> alan\u0131 vard\u0131r; bu alan, dok\u00fcman\u0131 di\u011ferlerinden ay\u0131rmak i\u00e7in otomatik olarak olu\u015fturulan bir <code>ObjectId<\/code> veya sizin belirledi\u011finiz herhangi bir de\u011fer olabilir.<\/p>\n<p>Birden fazla dok\u00fcman bir araya gelerek <strong>Koleksiyonlar\u0131<\/strong> olu\u015fturur. Koleksiyonlar, ili\u015fkisel veritabanlar\u0131ndaki tablolara benzer, ancak \u00f6nemli bir farkla: Bir koleksiyondaki dok\u00fcmanlar farkl\u0131 \u015femalara sahip olabilir. Bu \"\u015femas\u0131z\" (schemaless) veya \"\u015fema esnekli\u011fi\" (schema-less) \u00f6zelli\u011fi, geli\u015ftirme s\u00fcrecinde inan\u0131lmaz bir \u00e7eviklik sa\u011flar. Uygulama gereksinimleri de\u011fi\u015ftik\u00e7e, mevcut dok\u00fcmanlar\u0131 etkilemeden yeni alanlar ekleyebilir veya kald\u0131rabilirsiniz. \u00d6rne\u011fin, bir e-ticaret uygulamas\u0131nda \"\u00fcr\u00fcnler\" koleksiyonunuz olabilir ve bu koleksiyonda cep telefonlar\u0131, kitaplar ve giysiler gibi farkl\u0131 \u00f6zelliklere sahip \u00fcr\u00fcnleri ayn\u0131 koleksiyon i\u00e7inde depolayabilirsiniz. Bu durum, veri modelinizi uygulama gereksinimlerine g\u00f6re kolayca adapte etmenize olanak tan\u0131r.<\/p>\n<pre><code>\n\/\/ \"urunler\" koleksiyonundaki iki farkl\u0131 dok\u00fcman \u00f6rne\u011fi\n{\n  \"_id\": ObjectId(\"...\"),\n  \"tip\": \"elektronik\",\n  \"ad\": \"Ak\u0131ll\u0131 Telefon X\",\n  \"fiyat\": 999.99,\n  \"marka\": \"TechCo\",\n  \"ozellikler\": { \"ekran\": \"6.1 in\u00e7\", \"bellek\": \"128GB\" }\n}\n{\n  \"_id\": ObjectId(\"...\"),\n  \"tip\": \"kitap\",\n  \"ad\": \"Geli\u015ftirici Rehberi\",\n  \"fiyat\": 49.50,\n  \"yazar\": \"Ay\u015fe Y\u0131lmaz\",\n  \"isbn\": \"978-1234567890\",\n  \"sayfaSayisi\": 320\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Son olarak, <strong>Veritabanlar\u0131<\/strong> kavram\u0131 gelir. MongoDB'de veritabanlar\u0131, koleksiyonlar\u0131 bar\u0131nd\u0131ran \u00fcst d\u00fczey bir organizasyon birimidir. Bir MongoDB sunucusu birden fazla veritaban\u0131 i\u00e7erebilir ve her veritaban\u0131 kendi koleksiyon setine sahip olur. Genellikle, her uygulama veya proje i\u00e7in ayr\u0131 bir veritaban\u0131 olu\u015fturmak iyi bir uygulamad\u0131r. \u00d6rne\u011fin, bir \"blog_uygulamasi\" veritaban\u0131 i\u00e7inde \"yazilar\", \"kullanicilar\" ve \"yorumlar\" gibi koleksiyonlar\u0131 bar\u0131nd\u0131rabilirsiniz. Bu yap\u0131, verilerinizi mant\u0131ksal olarak izole etmenizi ve y\u00f6netmenizi kolayla\u015ft\u0131r\u0131r. Veritaban\u0131 y\u00f6netim sistemlerinin kalbinde yer alan bu \u00fc\u00e7 temel kavram\u0131 anlad\u0131\u011f\u0131n\u0131zda, MongoDB ile \u00e7al\u0131\u015fmaya ba\u015flamak i\u00e7in sa\u011flam bir temel olu\u015fturmu\u015f olursunuz. Dok\u00fcmanlar\u0131n esnekli\u011fi, koleksiyonlar\u0131n \u015femas\u0131z yap\u0131s\u0131 ve veritabanlar\u0131n\u0131n mant\u0131ksal ayr\u0131m\u0131, MongoDB'yi modern geli\u015ftirme yakla\u015f\u0131mlar\u0131 i\u00e7in ideal bir se\u00e7im haline getirmektedir.<\/p>\n<div class=\"expert-tip\">\n      Uzman \u0130pucu: Dok\u00fcmanlar\u0131n\u0131z\u0131 tasarlarken, s\u0131kl\u0131kla birlikte eri\u015filen verileri ayn\u0131 dok\u00fcman i\u00e7inde tutmaya \u00e7al\u0131\u015f\u0131n. Bu, okuma performans\u0131n\u0131 art\u0131r\u0131r ve JOIN i\u015flemlerine olan ihtiyac\u0131 minimize eder.\n    <\/div>\n<h2>MongoDB ile Temel CRUD \u0130\u015flemleri Nas\u0131l Yap\u0131l\u0131r? (Kod \u00d6rnekleriyle)<\/h2>\n<p>MongoDB'nin g\u00fcc\u00fcn\u00fc ke\u015ffetmenin en iyi yolu, veriler \u00fczerinde temel Create, Read, Update, Delete (CRUD) i\u015flemlerini nas\u0131l ger\u00e7ekle\u015ftirece\u011fimizi \u00f6\u011frenmektir. Bu b\u00f6l\u00fcm, Node.js ve MongoDB'nin resmi s\u00fcr\u00fcc\u00fcs\u00fc (veya Mongoose gibi bir ODM) kullanarak bu i\u015flemleri ad\u0131m ad\u0131m nas\u0131l yapaca\u011f\u0131n\u0131z\u0131 g\u00f6sterecek. Bu \u00f6rnekler, bir e-ticaret uygulamas\u0131ndaki \u00fcr\u00fcn y\u00f6netimini temel alacakt\u0131r.<\/p>\n<h3>Veritaban\u0131na Ba\u011flant\u0131 Kurma<\/h3>\n<p>\u0130lk olarak, MongoDB sunucumuza bir ba\u011flant\u0131 kurmam\u0131z gerekiyor. Bu genellikle uygulaman\u0131z\u0131n ba\u015flang\u0131\u00e7 noktas\u0131nda yap\u0131l\u0131r.<\/p>\n<pre><code>\nconst { MongoClient } = require('mongodb');\n\n\/\/ MongoDB ba\u011flant\u0131 URL'si\nconst uri = \"mongodb:\/\/localhost:27017\"; \/\/ Yerel MongoDB sunucusu\nconst client = new MongoClient(uri);\n\nasync function connectToDb() {\n  try {\n    await client.connect();\n    console.log(\"MongoDB'ye ba\u015far\u0131yla ba\u011fland\u0131!\");\n    \/\/ Veritaban\u0131 ve koleksiyon \u00f6rneklerini al\n    const db = client.db(\"ecommerceDB\"); \/\/ Olu\u015fturmak istedi\u011finiz veritaban\u0131 ad\u0131\n    const productsCollection = db.collection(\"products\"); \/\/ Olu\u015fturmak istedi\u011finiz koleksiyon ad\u0131\n\n    \/\/ CRUD i\u015flemlerini buradan \u00e7a\u011f\u0131rabilirsiniz\n    \/\/ await createProduct(productsCollection);\n    \/\/ await readProducts(productsCollection);\n    \/\/ await updateProduct(productsCollection);\n    \/\/ await deleteProduct(productsCollection);\n\n  } catch (error) {\n    console.error(\"MongoDB ba\u011flant\u0131 hatas\u0131:\", error);\n  } finally {\n    \/\/ client.close(); \/\/ Uygulama kapan\u0131rken ba\u011flant\u0131y\u0131 kapat\u0131n\n  }\n}\n\nconnectToDb();\n    <\/pre>\n<p><\/code><\/p>\n<h3>1. Create (Ekleme) \u0130\u015flemleri: Veri Nas\u0131l Eklenir?<\/h3>\n<p>Veritaban\u0131na yeni dok\u00fcmanlar eklemek i\u00e7in <code>insertOne()<\/code> veya <code>insertMany()<\/code> y\u00f6ntemlerini kullan\u0131r\u0131z.<\/p>\n<pre><code>\nconst createProduct = async (collection) => {\n  const product1 = {\n    name: \"Ak\u0131ll\u0131 Saat Pro\",\n    category: \"Elektronik\",\n    price: 399.99,\n    stock: 50,\n    features: [\"Nab\u0131z \u00d6l\u00e7er\", \"GPS\", \"Su Ge\u00e7irmez\"],\n    isActive: true\n  };\n\n  const product2 = {\n    name: \"Masa\u00fcst\u00fc Oyun Bilgisayar\u0131\",\n    category: \"Bilgisayar\",\n    price: 1899.00,\n    stock: 15,\n    processor: \"Intel i7\",\n    ram: \"16GB\",\n    ssd: \"512GB\",\n    isActive: true\n  };\n\n  const product3 = {\n    name: \"Kablosuz Kulakl\u0131k X\",\n    category: \"Elektronik\",\n    price: 129.50,\n    stock: 120,\n    color: \"Siyah\",\n    isActive: false \/\/ Stokta yok veya pasif\n  };\n\n  try {\n    const result1 = await collection.insertOne(product1);\n    console.log(<code>1 \u00dcr\u00fcn Eklendi: ID ${result1.insertedId}<\/code>);\n\n    const result2 = await collection.insertMany([product2, product3]);\n    console.log(<code>2 \u00dcr\u00fcn Eklendi: ID&#039;ler ${result2.insertedIds}<\/code>);\n  } catch (error) {\n    console.error(\"\u00dcr\u00fcn ekleme hatas\u0131:\", error);\n  }\n};\n    <\/pre>\n<p><\/code><\/p>\n<p><code>insertOne()<\/code> tek bir dok\u00fcman eklerken, <code>insertMany()<\/code> bir dizi dok\u00fcman\u0131 ayn\u0131 anda eklemenizi sa\u011flar. MongoDB, her eklenen dok\u00fcman i\u00e7in otomatik olarak benzersiz bir <code>_id<\/code> alan\u0131 olu\u015fturur.<\/p>\n<h3>2. Read (Okuma) \u0130\u015flemleri: Veri Nas\u0131l Sorgulan\u0131r?<\/h3>\n<p>Veritaban\u0131ndan dok\u00fcmanlar\u0131 almak i\u00e7in <code>find()<\/code> ve <code>findOne()<\/code> y\u00f6ntemlerini kullan\u0131r\u0131z. <code>find()<\/code> bir imle\u00e7 (cursor) d\u00f6nd\u00fcr\u00fcr, bu imleci <code>toArray()<\/code> ile bir diziye d\u00f6n\u00fc\u015ft\u00fcrebilir veya <code>forEach()<\/code> ile tek tek i\u015fleyebilirsiniz.<\/p>\n<pre><code>\nconst readProducts = async (collection) => {\n  \/\/ T\u00fcm \u00fcr\u00fcnleri oku\n  console.log(\"\\nT\u00fcm \u00dcr\u00fcnler:\");\n  let products = await collection.find({}).toArray();\n  products.forEach(p => console.log(p));\n\n  \/\/ Kategoriye g\u00f6re \u00fcr\u00fcnleri filtrele (\u00f6rn: Elektronik)\n  console.log(\"\\nElektronik Kategori \u00dcr\u00fcnleri:\");\n  products = await collection.find({ category: \"Elektronik\" }).toArray();\n  products.forEach(p => console.log(p));\n\n  \/\/ Fiyat\u0131 belirli bir aral\u0131kta olan \u00fcr\u00fcnleri bul ($gt: greater than, $lt: less than)\n  console.log(\"\\nFiyat\u0131 100-500 Aras\u0131 \u00dcr\u00fcnler:\");\n  products = await collection.find({ price: { $gt: 100, $lt: 500 } }).toArray();\n  products.forEach(p => console.log(p));\n\n  \/\/ Sadece belirli alanlar\u0131 d\u00f6nd\u00fcr (projection)\n  console.log(\"\\nSadece \u00dcr\u00fcn Ad\u0131 ve Fiyat\u0131:\");\n  products = await collection.find({ category: \"Elektronik\" }, { projection: { name: 1, price: 1, _id: 0 } }).toArray();\n  products.forEach(p => console.log(p));\n\n  \/\/ Tek bir \u00fcr\u00fcn bul (\u00f6rn: isme g\u00f6re)\n  console.log(\"\\nTek Bir \u00dcr\u00fcn (Ak\u0131ll\u0131 Saat Pro):\");\n  const singleProduct = await collection.findOne({ name: \"Ak\u0131ll\u0131 Saat Pro\" });\n  console.log(singleProduct);\n};\n    <\/pre>\n<p><\/code><\/p>\n<p>Sorgular, JSON benzeri bir s\u00f6zdizimi kullan\u0131r ve <code>$gt<\/code>, <code>$lt<\/code> gibi operat\u00f6rlerle karma\u015f\u0131k filtrelemeler yapman\u0131z\u0131 sa\u011flar. <code>projection<\/code> nesnesi ile d\u00f6nd\u00fcr\u00fclecek alanlar\u0131 belirleyebilirsiniz (<code>1<\/code> dahil etmek, <code>0<\/code> hari\u00e7 tutmak i\u00e7in kullan\u0131l\u0131r).<\/p>\n<div class=\"expert-tip\">\n      Uzman \u0130pucu: Performans i\u00e7in, b\u00fcy\u00fck veri k\u00fcmelerinde <code>find().toArray()<\/code> yerine imleci tek tek i\u015flemeniz veya <code>limit()<\/code> ve <code>skip()<\/code> metodlar\u0131n\u0131 kullanarak sayfalama yapman\u0131z \u00f6nerilir.\n    <\/div>\n<h3>3. Update (G\u00fcncelleme) \u0130\u015flemleri: Veri Nas\u0131l De\u011fi\u015ftirilir?<\/h3>\n<p>Mevcut dok\u00fcmanlar\u0131 g\u00fcncellemek i\u00e7in <code>updateOne()<\/code>, <code>updateMany()<\/code> ve <code>replaceOne()<\/code> y\u00f6ntemlerini kullan\u0131r\u0131z.<\/p>\n<pre><code>\nconst { ObjectId } = require('mongodb'); \/\/ ObjectId'yi i\u00e7e aktar\u0131n\n\nconst updateProduct = async (collection) => {\n  \/\/ Tek bir \u00fcr\u00fcn\u00fcn fiyat\u0131n\u0131 g\u00fcncelle ($set operat\u00f6r\u00fc ile)\n  console.log(\"\\n\u00dcr\u00fcn G\u00fcncelleme (Ak\u0131ll\u0131 Saat Pro fiyat\u0131):\");\n  const updateResult1 = await collection.updateOne(\n    { name: \"Ak\u0131ll\u0131 Saat Pro\" },\n    { $set: { price: 379.99 } }\n  );\n  console.log(<code>${updateResult1.modifiedCount} dok\u00fcman g\u00fcncellendi.<\/code>);\n\n  \/\/ Birden fazla \u00fcr\u00fcn\u00fcn stok durumunu g\u00fcncelle ($inc operat\u00f6r\u00fc ile stok art\u0131rma, $set ile aktiflik)\n  console.log(\"\\n\u00dcr\u00fcn G\u00fcncelleme (Elektronik \u00fcr\u00fcnlerin sto\u011funu art\u0131r):\");\n  const updateResult2 = await collection.updateMany(\n    { category: \"Elektronik\" },\n    { $inc: { stock: 10 }, $set: { isActive: true } }\n  );\n  console.log(<code>${updateResult2.modifiedCount} dok\u00fcman g\u00fcncellendi.<\/code>);\n\n  \/\/ Bir dok\u00fcman\u0131 tamamen de\u011fi\u015ftirmek (mevcut alanlar silinir, yenileri eklenir)\n  \/\/ Genellikle ObjectId ile spesifik bir dok\u00fcman\u0131 hedeflemek daha g\u00fcvenlidir.\n  console.log(\"\\n\u00dcr\u00fcn\u00fc De\u011fi\u015ftirme (ID ile):\");\n  const productIdToReplace = new ObjectId(\"654a9d28c7f2b1d0e8a7b3c4\"); \/\/ Ger\u00e7ek bir ID kullan\u0131n\n  const replaceResult = await collection.replaceOne(\n    { _id: productIdToReplace },\n    { name: \"Yepyeni Ak\u0131ll\u0131 Cihaz\", category: \"Yenilik\u00e7i\", price: 500.00, stock: 25, availableDate: new Date() }\n  );\n  console.log(<code>${replaceResult.modifiedCount} dok\u00fcman de\u011fi\u015ftirildi.<\/code>);\n};\n    <\/pre>\n<p><\/code><\/p>\n<p>G\u00fcncelleme i\u015flemleri i\u00e7in genellikle <code>$set<\/code> (alan de\u011ferini de\u011fi\u015ftirir), <code>$inc<\/code> (say\u0131sal alanlar\u0131 art\u0131r\u0131r\/azalt\u0131r), <code>$push<\/code> (diziye eleman ekler) gibi operat\u00f6rler kullan\u0131l\u0131r. <code>replaceOne()<\/code> ise, sorguyla e\u015fle\u015fen ilk dok\u00fcman\u0131 tamamen yeni bir dok\u00fcmanla de\u011fi\u015ftirir; dikkatli kullan\u0131lmal\u0131d\u0131r.<\/p>\n<h3>4. Delete (Silme) \u0130\u015flemleri: Veri Nas\u0131l Silinir?<\/h3>\n<p>Dok\u00fcmanlar\u0131 silmek i\u00e7in <code>deleteOne()<\/code> ve <code>deleteMany()<\/code> y\u00f6ntemlerini kullan\u0131r\u0131z.<\/p>\n<pre><code>\nconst deleteProduct = async (collection) => {\n  \/\/ Tek bir \u00fcr\u00fcn\u00fc sil (\u00f6rn: ad\u0131 \"Kablosuz Kulakl\u0131k X\" olan\u0131)\n  console.log(\"\\n\u00dcr\u00fcn Silme (Kablosuz Kulakl\u0131k X):\");\n  const deleteResult1 = await collection.deleteOne({ name: \"Kablosuz Kulakl\u0131k X\" });\n  console.log(<code>${deleteResult1.deletedCount} dok\u00fcman silindi.<\/code>);\n\n  \/\/ Belirli bir kategoriye ait t\u00fcm \u00fcr\u00fcnleri sil\n  console.log(\"\\n\u00dcr\u00fcn Silme (T\u00fcm 'Bilgisayar' kategorisi \u00fcr\u00fcnleri):\");\n  const deleteResult2 = await collection.deleteMany({ category: \"Bilgisayar\" });\n  console.log(<code>${deleteResult2.deletedCount} dok\u00fcman silindi.<\/code>);\n\n  \/\/ Koleksiyondaki t\u00fcm dok\u00fcmanlar\u0131 silmek i\u00e7in bo\u015f bir filtre ge\u00e7ilebilir:\n  \/\/ await collection.deleteMany({});\n  \/\/ console.log(\"T\u00fcm dok\u00fcmanlar silindi.\");\n};\n    <\/pre>\n<p><\/code><\/p>\n<p><code>deleteOne()<\/code> sorguyla e\u015fle\u015fen ilk dok\u00fcman\u0131 silerken, <code>deleteMany()<\/code> t\u00fcm e\u015fle\u015fen dok\u00fcmanlar\u0131 siler. T\u00fcm koleksiyonu bo\u015faltmak isterseniz, <code>deleteMany({})<\/code> kullanabilirsiniz, ancak bu i\u015flem geri al\u0131namaz oldu\u011fundan dikkatli olunmal\u0131d\u0131r.<\/p>\n<p>Bu temel CRUD i\u015flemleri, MongoDB ile etkile\u015fim kurman\u0131n omurgas\u0131n\u0131 olu\u015fturur. Bu yetenekler \u00fczerinde ustala\u015farak, karma\u015f\u0131k veri y\u00f6netimi g\u00f6revlerini kolayca yerine getirebilir ve dinamik uygulamalar geli\u015ftirebilirsiniz.<\/p>\n<h2>Geli\u015fmi\u015f MongoDB Teknikleri: \u0130ndeksleme ve Veri Modelleme Stratejileri<\/h2>\n<p>MongoDB'nin temel CRUD i\u015flemlerini \u00f6\u011frendikten sonra, uygulamalar\u0131n\u0131z\u0131n performans\u0131n\u0131 ve veri yap\u0131s\u0131n\u0131 daha da optimize etmek i\u00e7in geli\u015fmi\u015f tekniklere odaklanmak \u00f6nemlidir. Bu b\u00f6l\u00fcmde, sorgu performans\u0131n\u0131 art\u0131rman\u0131n anahtar\u0131 olan indeksleme ve uygulaman\u0131z\u0131n gereksinimlerine en uygun veri yap\u0131s\u0131n\u0131 olu\u015fturman\u0131z\u0131 sa\u011flayan veri modelleme stratejilerini derinlemesine inceleyece\u011fiz.<\/p>\n<h3>\u0130ndeksleme: Sorgu Performans\u0131n\u0131 Neden ve Nas\u0131l Art\u0131r\u0131r\u0131z?<\/h3>\n<p>\u0130ndeksler, MongoDB'de veritaban\u0131 sorgular\u0131n\u0131n h\u0131z\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131ran \u00f6zel veri yap\u0131lar\u0131d\u0131r. T\u0131pk\u0131 bir kitab\u0131n dizini gibi, indeksler de veritaban\u0131n\u0131n belirli bir alan\u0131ndaki verilere h\u0131zl\u0131ca eri\u015fmesini sa\u011flar. Bir indeks olmadan, MongoDB bir sorguyu yan\u0131tlamak i\u00e7in koleksiyondaki her dok\u00fcman\u0131 taramak (full collection scan) zorunda kal\u0131r. Bu, \u00f6zellikle b\u00fcy\u00fck koleksiyonlarda \u00e7ok yava\u015f olabilir. Bir indeks olu\u015fturuldu\u011funda, veritaban\u0131 sorgular\u0131n\u0131 daha verimli bir \u015fekilde y\u00f6nlendirebilir ve yaln\u0131zca ilgili dok\u00fcmanlara bakarak performans\u0131 art\u0131rabilir.<\/p>\n<p><strong>Neden \u0130ndeks Kullanmal\u0131y\u0131z?<\/strong><\/p>\n<ul>\n<li><strong>Sorgu H\u0131zland\u0131rma:<\/strong> En belirgin faydas\u0131d\u0131r. S\u0131k\u00e7a sorgulanan veya s\u0131ralama yap\u0131lan alanlara indeks eklemek, yan\u0131t s\u00fcrelerini milisaniyeler seviyesine d\u00fc\u015f\u00fcrebilir.<\/li>\n<li><strong>Benzersizlik Sa\u011flama:<\/strong> Benzersiz indeksler, bir koleksiyondaki belirli bir alan\u0131n de\u011ferlerinin tekrarlanmamas\u0131n\u0131 garanti eder. \u00d6rne\u011fin, e-posta adresleri i\u00e7in benzersiz bir indeks olu\u015fturarak her kullan\u0131c\u0131n\u0131n farkl\u0131 bir e-posta adresine sahip olmas\u0131n\u0131 sa\u011flayabilirsiniz.<\/li>\n<li><strong>S\u0131ralama Performans\u0131:<\/strong> Sorgu sonu\u00e7lar\u0131n\u0131 belirli bir alana g\u00f6re s\u0131ralarken, uygun bir indeks bu i\u015flemi \u00e7ok daha h\u0131zl\u0131 hale getirir.<\/li>\n<\/ul>\n<p><strong>\u0130ndeks T\u00fcrleri ve Nas\u0131l Olu\u015fturulur?<\/strong><\/p>\n<p>MongoDB \u00e7e\u015fitli indeks t\u00fcrleri sunar:<\/p>\n<ol>\n<li><strong>Tek Alan \u0130ndeksleri:<\/strong> Tek bir alan \u00fczerinde olu\u015fturulur.<\/li>\n<li><strong>Bile\u015fik \u0130ndeksler:<\/strong> Birden fazla alan \u00fczerinde olu\u015fturulur ve sorgularda bu alanlar\u0131n kombinasyonlar\u0131n\u0131 kullan\u0131rken etkilidir. S\u0131ra \u00f6nemlidir (\u00f6rn: <code>{ A: 1, B: 1 }<\/code> indeksi, <code>{ B: 1, A: 1 }<\/code> indeksinden farkl\u0131d\u0131r).<\/li>\n<li><strong>\u00c7ok Anahtarl\u0131 (Multikey) \u0130ndeksler:<\/strong> Dizilerdeki de\u011ferleri indeksler. Bir dok\u00fcmanda dizi olan bir alana indeks eklendi\u011finde, dizideki her de\u011fer i\u00e7in ayr\u0131 bir indeks giri\u015fi olu\u015fturulur.<\/li>\n<li><strong>Text \u0130ndeksleri:<\/strong> Metin tabanl\u0131 aramalarda kullan\u0131l\u0131r.<\/li>\n<li><strong>Geospatial \u0130ndeksler:<\/strong> Co\u011frafi konum tabanl\u0131 sorgular i\u00e7in kullan\u0131l\u0131r (\u00f6rn: <code>2dsphere<\/code>).<\/li>\n<\/ol>\n<p>\u0130ndeks olu\u015fturma \u00f6rne\u011fi:<\/p>\n<pre><code>\n\/\/ Node.js ile indeks olu\u015fturma \u00f6rne\u011fi\nconst createIndexes = async (collection) => {\n  try {\n    \/\/ Tek alan indeksi: 'category' alan\u0131na artan (1) s\u0131rayla indeks olu\u015fturma\n    await collection.createIndex({ category: 1 });\n    console.log(\"Category indeksi olu\u015fturuldu.\");\n\n    \/\/ Bile\u015fik indeks: 'price' ve 'stock' alanlar\u0131na indeks olu\u015fturma\n    \/\/ Bu indeks, <code>category<\/code>, <code>price<\/code> ve <code>stock<\/code> alanlar\u0131n\u0131 i\u00e7eren sorgular\u0131 h\u0131zland\u0131rabilir\n    \/\/ veya <code>category<\/code> ve <code>price<\/code> alanlar\u0131n\u0131 i\u00e7eren sorgular\u0131 h\u0131zland\u0131rabilir.\n    await collection.createIndex({ category: 1, price: -1 }); \/\/ price azalan (-1) s\u0131ra\n    console.log(\"Category ve Price bile\u015fik indeksi olu\u015fturuldu.\");\n\n    \/\/ Benzersiz indeks: 'email' alan\u0131 i\u00e7in benzersiz indeks\n    \/\/ Kullan\u0131c\u0131 koleksiyonunda e-posta adreslerinin tekrar etmemesini sa\u011flar\n    const usersCollection = collection.db.collection(\"users\");\n    await usersCollection.createIndex({ email: 1 }, { unique: true });\n    console.log(\"Email i\u00e7in benzersiz indeks olu\u015fturuldu.\");\n\n    \/\/ Text indeksi: 'name' ve 'description' alanlar\u0131nda tam metin aramas\u0131 i\u00e7in\n    await collection.createIndex({ name: \"text\", description: \"text\" });\n    console.log(\"Metin indeksi olu\u015fturuldu.\");\n\n  } catch (error) {\n    console.error(\"\u0130ndeks olu\u015fturma hatas\u0131:\", error);\n  }\n};\n    <\/pre>\n<p><\/code><\/p>\n<p>\u0130ndeksleme stratejisi, uygulaman\u0131z\u0131n sorgu desenlerine g\u00f6re dikkatlice planlanmal\u0131d\u0131r. A\u015f\u0131r\u0131 indeksleme, yazma performans\u0131n\u0131 d\u00fc\u015f\u00fcrebilir ve disk alan\u0131 t\u00fcketimini art\u0131rabilir, bu y\u00fczden dengeli bir yakla\u015f\u0131m \u00f6nemlidir.<\/p>\n<h3>Veri Modelleme Stratejileri: Embedded vs. Referans Yakla\u015f\u0131m\u0131<\/h3>\n<p>MongoDB'de veri modelleme, ili\u015fkisel veritabanlar\u0131ndaki normalizasyon kurallar\u0131ndan farkl\u0131 bir d\u00fc\u015f\u00fcnce yap\u0131s\u0131 gerektirir. Burada anahtar, veriye eri\u015fim kal\u0131plar\u0131n\u0131z\u0131 anlamak ve verileri ya i\u00e7 i\u00e7e (embedded) dok\u00fcmanlar olarak ya da referanslarla (referenced) birle\u015ftirerek depolamakt\u0131r. Do\u011fru modelleme, uygulaman\u0131z\u0131n performans\u0131n\u0131 ve \u00f6l\u00e7eklenebilirli\u011fini do\u011frudan etkiler.<\/p>\n<h4>1. Embedded (\u0130\u00e7 \u0130\u00e7e) Dok\u00fcmanlar:<\/h4>\n<p>Bu yakla\u015f\u0131m, bir dok\u00fcman\u0131n i\u00e7ine ba\u015fka bir dok\u00fcman\u0131 veya bir diziyi g\u00f6merek verileri ili\u015fkilendirmeyi i\u00e7erir. Genellikle, bir veri par\u00e7as\u0131n\u0131n ba\u015fka bir veri par\u00e7as\u0131 olmadan anlam ifade etmedi\u011fi veya s\u0131kl\u0131kla birlikte sorguland\u0131\u011f\u0131 durumlarda tercih edilir.<\/p>\n<p><strong>Avantajlar\u0131:<\/strong><\/p>\n<ul>\n<li><strong>Tek Bir Sorguda Eri\u015fim:<\/strong> \u0130li\u015fkili verilere tek bir veritaban\u0131 sorgusuyla eri\u015filir, bu da okuma performans\u0131n\u0131 art\u0131r\u0131r (JOIN gereksinimini ortadan kald\u0131r\u0131r).<\/li>\n<li><strong>Atomik G\u00fcncellemeler:<\/strong> Tek bir dok\u00fcman i\u00e7indeki verilerin g\u00fcncellenmesi atomiktir, yani ya tamamen ba\u015far\u0131l\u0131 olur ya da hi\u00e7 olmaz.<\/li>\n<li><strong>Daha Az Geli\u015ftirici Kodu:<\/strong> Uygulama katman\u0131nda birden fazla sorgu yapma veya verileri birle\u015ftirme ihtiyac\u0131n\u0131 azalt\u0131r.<\/li>\n<\/ul>\n<p><strong>Dezavantajlar\u0131:<\/strong><\/p>\n<ul>\n<li><strong>Dok\u00fcman B\u00fcy\u00fckl\u00fc\u011f\u00fc S\u0131n\u0131r\u0131:<\/strong> Bir dok\u00fcman 16MB ile s\u0131n\u0131rl\u0131d\u0131r. \u00c7ok say\u0131da i\u00e7 i\u00e7e dok\u00fcman bu s\u0131n\u0131ra ula\u015fabilir.<\/li>\n<li><strong>Veri Tekrar\u0131:<\/strong> E\u011fer g\u00f6m\u00fcl\u00fc veri ba\u015fka yerlerde de kullan\u0131l\u0131yorsa, veri tekrar\u0131 olu\u015fabilir. Bu durumda bir g\u00fcncelleme birden fazla yerde yap\u0131lmal\u0131d\u0131r.<\/li>\n<li><strong>B\u00fcy\u00fcyen Diziler:<\/strong> S\u0131n\u0131rs\u0131z b\u00fcy\u00fcyen diziler performans sorunlar\u0131na yol a\u00e7abilir.<\/li>\n<\/ul>\n<p><strong>\u00d6rnek Senaryo: Blog Yaz\u0131s\u0131 ve Yorumlar\u0131<\/strong><\/p>\n<p>Bir blog yaz\u0131s\u0131na ait yorumlar, genellikle yaz\u0131yla birlikte g\u00f6r\u00fcnt\u00fclenir ve yorumlar\u0131n kendi ba\u015f\u0131na pek bir anlam\u0131 yoktur. Bu durumda yorumlar\u0131 yaz\u0131n\u0131n i\u00e7ine g\u00f6mmek mant\u0131kl\u0131d\u0131r:<\/p>\n<pre><code>\n{\n  \"_id\": ObjectId(\"...\"),\n  \"baslik\": \"MongoDB Veri Modelleme\",\n  \"icerik\": \"...\",\n  \"yazar\": \"Can Y\u0131lmaz\",\n  \"yorumlar\": [\n    {\n      \"yorumId\": ObjectId(\"...\"),\n      \"yazan\": \"Zeynep\",\n      \"tarih\": ISODate(\"2023-11-07T14:30:00Z\"),\n      \"mesaj\": \"\u00c7ok faydal\u0131 bir makale!\"\n    },\n    {\n      \"yorumId\": ObjectId(\"...\"),\n      \"yazan\": \"Mehmet\",\n      \"tarih\": ISODate(\"2023-11-07T15:00:00Z\"),\n      \"mesaj\": \"Te\u015fekk\u00fcrler, \u00e7ok iyi anlat\u0131lm\u0131\u015f.\"\n    }\n  ]\n}\n    <\/pre>\n<p><\/code><\/p>\n<h4>2. Referans Yakla\u015f\u0131m\u0131:<\/h4>\n<p>Bu yakla\u015f\u0131mda, ili\u015fkili veriler ayr\u0131 koleksiyonlarda depolan\u0131r ve aralar\u0131nda <code>_id<\/code> alanlar\u0131n\u0131 kullanarak referanslar kurulur. \u0130li\u015fkisel veritabanlar\u0131ndaki yabanc\u0131 anahtarlara benzer bir mant\u0131kla \u00e7al\u0131\u015f\u0131r.<\/p>\n<p><strong>Avantajlar\u0131:<\/strong><\/p>\n<ul>\n<li><strong>Normalizasyon:<\/strong> Veri tekrar\u0131n\u0131 azalt\u0131r. Bir veri par\u00e7as\u0131n\u0131 sadece bir yerde tutarak g\u00fcncellemeleri kolayla\u015ft\u0131r\u0131r.<\/li>\n<li><strong>Dok\u00fcman B\u00fcy\u00fckl\u00fc\u011f\u00fc S\u0131n\u0131r\u0131 A\u015f\u0131m\u0131:<\/strong> B\u00fcy\u00fck veya s\u0131n\u0131rs\u0131z b\u00fcy\u00fcyen ili\u015fkiler i\u00e7in uygundur.<\/li>\n<li><strong>Ba\u011f\u0131ms\u0131z Eri\u015fim:<\/strong> \u0130li\u015fkili verilere ba\u011f\u0131ms\u0131z olarak eri\u015filmesi gerekti\u011finde idealdir.<\/li>\n<\/ul>\n<p><strong>Dezavantajlar\u0131:<\/strong><\/p>\n<ul>\n<li><strong>Ek Sorgu Gereksinimi:<\/strong> \u0130li\u015fkili verilere eri\u015fmek i\u00e7in birden fazla sorgu (JOIN benzeri i\u015flemler) gerekebilir. Bu da okuma performans\u0131n\u0131 d\u00fc\u015f\u00fcrebilir. Uygulama katman\u0131nda \"populate\" i\u015flemleri yapmay\u0131 gerektirir.<\/li>\n<li><strong>Atomik Olmayan G\u00fcncellemeler:<\/strong> \u0130li\u015fkili dok\u00fcmanlar \u00fczerinde yap\u0131lan g\u00fcncellemeler atomik olmayabilir.<\/li>\n<\/ul>\n<p><strong>\u00d6rnek Senaryo: \u00dcr\u00fcnler ve Kategoriler<\/strong><\/p>\n<p>Bir e-ticaret uygulamas\u0131nda \u00fcr\u00fcnler ve kategoriler ayr\u0131 ayr\u0131 y\u00f6netilebilir ve her kategori birden fazla \u00fcr\u00fcne sahip olabilir. Bu durumda referans yakla\u015f\u0131m\u0131 daha uygun olabilir.<\/p>\n<pre><code>\n\/\/ products koleksiyonu\n{\n  \"_id\": ObjectId(\"prod123\"),\n  \"ad\": \"Ak\u0131ll\u0131 Telefon X\",\n  \"fiyat\": 999.99,\n  \"kategoriId\": ObjectId(\"cat456\") \/\/ Kategori koleksiyonuna referans\n}\n\n\/\/ categories koleksiyonu\n{\n  \"_id\": ObjectId(\"cat456\"),\n  \"ad\": \"Elektronik\",\n  \"aciklama\": \"Ak\u0131ll\u0131 telefonlar, bilgisayarlar vb.\"\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Bir \u00fcr\u00fcn\u00fcn kategorisini \u00f6\u011frenmek veya bir kategoriye ait t\u00fcm \u00fcr\u00fcnleri listelemek i\u00e7in iki ayr\u0131 sorgu yapman\u0131z veya Aggregation Framework'\u00fcn <code>$lookup<\/code> operat\u00f6r\u00fcn\u00fc kullanman\u0131z gerekebilir.<\/p>\n<div class=\"expert-tip\">\n      Uzman \u0130pucu: Veri modelleme, uygulaman\u0131z\u0131n \u00f6zel kullan\u0131m durumlar\u0131na g\u00f6re yap\u0131lmal\u0131d\u0131r. \"Okuma a\u011f\u0131rl\u0131kl\u0131\" uygulamalar genellikle embedded dok\u00fcmanlar\u0131 tercih ederken, \"yazma a\u011f\u0131rl\u0131kl\u0131\" veya s\u0131k g\u00fcncellenen, ba\u011f\u0131ms\u0131z eri\u015fim gerektiren veriler referans yakla\u015f\u0131m\u0131n\u0131 kullan\u0131r. Her iki yakla\u015f\u0131m\u0131n hibrit modellerini de uygulaman\u0131z m\u00fcmk\u00fcnd\u00fcr.\n    <\/div>\n<p>Bu geli\u015fmi\u015f teknikleri anlamak ve do\u011fru bir \u015fekilde uygulamak, MongoDB'nin ger\u00e7ek potansiyelini ortaya \u00e7\u0131karman\u0131z\u0131 sa\u011flayacakt\u0131r. \u0130ndeksler ve iyi d\u00fc\u015f\u00fcn\u00fclm\u00fc\u015f bir veri modeli, uygulaman\u0131z\u0131n performans\u0131n\u0131 ve bak\u0131m kolayl\u0131\u011f\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131racakt\u0131r.<\/p>\n<h2>MongoDB ile B\u00fcy\u00fck \u00d6l\u00e7ekli Uygulamalar: Aggregation Framework, Replica Setler ve Sharding<\/h2>\n<p>Uygulamalar b\u00fcy\u00fcd\u00fck\u00e7e ve veri hacmi artt\u0131k\u00e7a, sadece temel CRUD i\u015flemleriyle yetinmek yeterli olmaz. MongoDB, bu t\u00fcr b\u00fcy\u00fck \u00f6l\u00e7ekli ve y\u00fcksek performans gerektiren senaryolar i\u00e7in g\u00fc\u00e7l\u00fc ara\u00e7lar ve mimari \u00f6zellikler sunar: Aggregation Framework, Replica Setler ve Sharding. Bu ara\u00e7lar, verilerinizi daha verimli bir \u015fekilde analiz etmenizi, y\u00fcksek eri\u015filebilirlik ve veri dayan\u0131kl\u0131l\u0131\u011f\u0131 sa\u011flaman\u0131z\u0131 ve yatay \u00f6l\u00e7eklenebilirli\u011fi elde etmenizi m\u00fcmk\u00fcn k\u0131lar.<\/p>\n<h3>Aggregation Framework: Verilerinizden Anlam \u00c7\u0131kar\u0131n<\/h3>\n<p>Aggregation Framework, MongoDB'nin en g\u00fc\u00e7l\u00fc \u00f6zelliklerinden biridir ve karma\u015f\u0131k veri i\u015fleme ve analiz g\u00f6revlerini do\u011frudan veritaban\u0131 i\u00e7inde ger\u00e7ekle\u015ftirmenizi sa\u011flar. SQL'deki <code>GROUP BY<\/code>, <code>JOIN<\/code> (<code>$lookup<\/code> ile), ve di\u011fer toplama fonksiyonlar\u0131n\u0131n \u00e7ok daha esnek ve g\u00fc\u00e7l\u00fc bir kar\u015f\u0131l\u0131\u011f\u0131d\u0131r. Aggregation i\u015flemleri, bir dizi \"a\u015fama\" (pipeline stage) kullan\u0131larak yap\u0131l\u0131r; her a\u015fama, giri\u015f dok\u00fcmanlar\u0131n\u0131 d\u00f6n\u00fc\u015ft\u00fcr\u00fcr ve bir sonraki a\u015famaya iletir.<\/p>\n<p><strong>Temel Aggregation A\u015famalar\u0131:<\/strong><\/p>\n<ul>\n<li><code>$match<\/code>: Dok\u00fcmanlar\u0131 filtreler (<code>find()<\/code> gibi). Genellikle pipeline'\u0131n ba\u015f\u0131nda performans\u0131 art\u0131rmak i\u00e7in kullan\u0131l\u0131r.<\/li>\n<li><code>$group<\/code>: Dok\u00fcmanlar\u0131 belirli bir anahtara g\u00f6re gruplar ve grup ba\u015f\u0131na \u00f6zet hesaplamalar\u0131 yapar (\u00f6rn: toplam, ortalama, say\u0131m).<\/li>\n<li><code>$project<\/code>: Dok\u00fcmanlar\u0131n yap\u0131s\u0131n\u0131 yeniden \u015fekillendirir, belirli alanlar\u0131 dahil eder, hari\u00e7 tutar veya yeni alanlar olu\u015fturur.<\/li>\n<li><code>$sort<\/code>: Dok\u00fcmanlar\u0131 belirli bir alana g\u00f6re s\u0131ralar.<\/li>\n<li><code>$limit<\/code>: Bir a\u015famadan ge\u00e7ecek dok\u00fcman say\u0131s\u0131n\u0131 s\u0131n\u0131rlar.<\/li>\n<li><code>$skip<\/code>: Belirli say\u0131da dok\u00fcman\u0131 atlar.<\/li>\n<li><code>$unwind<\/code>: Bir dizi alan\u0131ndaki her \u00f6\u011fe i\u00e7in yeni bir dok\u00fcman olu\u015fturur.<\/li>\n<li><code>$lookup<\/code>: Di\u011fer koleksiyonlardaki verileri birle\u015ftirerek SQL'deki sol d\u0131\u015f birle\u015fmeye benzer bir i\u015flem yapar.<\/li>\n<\/ul>\n<p><strong>\u00d6rnek Senaryo: E-ticaret Uygulamas\u0131 Sat\u0131\u015f Raporu<\/strong><\/p>\n<p>En \u00e7ok satan \u00fcr\u00fcn kategorilerini ve her kategorideki toplam sat\u0131\u015f tutar\u0131n\u0131 bulmak isteyelim:<\/p>\n<pre><code>\nconst aggregateSalesData = async (collection) => {\n  try {\n    const pipeline = [\n      {\n        $match: {\n          isActive: true, \/\/ Sadece aktif \u00fcr\u00fcnleri dikkate al\n          stock: { $gt: 0 } \/\/ Stokta olan \u00fcr\u00fcnleri\n        }\n      },\n      {\n        $group: {\n          _id: \"$category\", \/\/ Kategoriye g\u00f6re grupla\n          totalProducts: { $sum: 1 }, \/\/ Her kategorideki \u00fcr\u00fcn say\u0131s\u0131n\u0131 say\n          averagePrice: { $avg: \"$price\" }, \/\/ Kategorinin ortalama fiyat\u0131\n          totalRevenueEstimate: { $sum: { $multiply: [\"$price\", \"$stock\"] } } \/\/ Fiyat*Stok ile tahmini toplam gelir\n        }\n      },\n      {\n        $sort: { totalRevenueEstimate: -1 } \/\/ Tahmini gelire g\u00f6re azalan s\u0131rada s\u0131rala\n      },\n      {\n        $limit: 5 \/\/ En iyi 5 kategoriyi g\u00f6ster\n      }\n    ];\n\n    const result = await collection.aggregate(pipeline).toArray();\n    console.log(\"\\nEn \u00c7ok Satan \u00dcr\u00fcn Kategorileri (Tahmini Gelire G\u00f6re):\");\n    result.forEach(item => console.log(item));\n  } catch (error) {\n    console.error(\"Aggregation Framework hatas\u0131:\", error);\n  }\n};\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnek, aktif ve stokta olan \u00fcr\u00fcnleri filtreleyip, kategorilerine g\u00f6re gruplayarak ortalama fiyat\u0131 ve tahmini toplam geliri hesaplar, ard\u0131ndan en y\u00fcksek gelirli ilk 5 kategoriyi s\u0131ralar. Aggregation Framework, bu t\u00fcr karma\u015f\u0131k analizleri tek bir veritaban\u0131 sorgusunda ger\u00e7ekle\u015ftirmenizi sa\u011flayarak uygulama kodunuzu basitle\u015ftirir ve performans\u0131 art\u0131r\u0131r.<\/p>\n<h3>Replica Setler: Y\u00fcksek Eri\u015filebilirlik ve Veri Dayan\u0131kl\u0131l\u0131\u011f\u0131<\/h3>\n<p>\u00dcretim ortamlar\u0131nda, tek bir sunucu \u00fczerinden hizmet vermek risklidir. Sunucu ar\u0131zalar\u0131 veri kayb\u0131na veya uygulama kesintisine yol a\u00e7abilir. MongoDB'nin <strong>Replica Setleri<\/strong>, bu sorunlar\u0131 \u00e7\u00f6zmek i\u00e7in tasarlanm\u0131\u015ft\u0131r. Bir replica set, verinin birden fazla sunucuda (node) kopyalar\u0131n\u0131 tutarak y\u00fcksek eri\u015filebilirlik ve veri dayan\u0131kl\u0131l\u0131\u011f\u0131 sa\u011flayan bir grup MongoDB sunucusudur.<\/p>\n<ul>\n<li><strong>Primary (Birincil) D\u00fc\u011f\u00fcm:<\/strong> Okuma ve yazma i\u015flemlerinin yap\u0131ld\u0131\u011f\u0131 ana d\u00fc\u011f\u00fcmd\u00fcr.<\/li>\n<li><strong>Secondary (\u0130kincil) D\u00fc\u011f\u00fcmler:<\/strong> Primary d\u00fc\u011f\u00fcm\u00fcn bir kopyas\u0131n\u0131 tutar ve okuma i\u015flemleri i\u00e7in kullan\u0131labilir (iste\u011fe ba\u011fl\u0131). Primary \u00e7\u00f6kt\u00fc\u011f\u00fcnde, ikincil d\u00fc\u011f\u00fcmlerden biri otomatik olarak yeni primary olarak se\u00e7ilir (otomatik failover).<\/li>\n<\/ul>\n<p>Bu yap\u0131, bir d\u00fc\u011f\u00fcm\u00fcn ar\u0131zalanmas\u0131 durumunda bile uygulaman\u0131z\u0131n kesintisiz \u00e7al\u0131\u015fmaya devam etmesini sa\u011flar. Veri kayb\u0131 riski azal\u0131r \u00e7\u00fcnk\u00fc veriler birden fazla yerde saklan\u0131r.<\/p>\n<h3>Sharding: Yatay \u00d6l\u00e7eklenebilirlik<\/h3>\n<p>Veri miktar\u0131n\u0131z o kadar b\u00fcy\u00fcd\u00fc ki, tek bir sunucu art\u0131k t\u00fcm veriyi depolayam\u0131yor veya sorgu y\u00fck\u00fcn\u00fc kald\u0131ram\u0131yorsa, <strong>Sharding<\/strong> devreye girer. Sharding, b\u00fcy\u00fck veri k\u00fcmelerini birden fazla sunucuya (shard) yatay olarak da\u011f\u0131tma y\u00f6ntemidir. Her shard, veritaban\u0131n\u0131n bir alt k\u00fcmesini depolar ve sorgu y\u00fck\u00fcn\u00fcn bir k\u0131sm\u0131n\u0131 \u00fcstlenir.<\/p>\n<ul>\n<li><strong>Shardlar:<\/strong> Verilerin bir k\u0131sm\u0131n\u0131 depolayan ba\u011f\u0131ms\u0131z MongoDB \u00f6rnekleridir (genellikle replica setleridir).<\/li>\n<li><strong>Mongos (Y\u00f6nlendirici):<\/strong> \u0130stemci uygulamalar\u0131ndan gelen sorgular\u0131 al\u0131r ve do\u011fru sharda y\u00f6nlendirir.<\/li>\n<li><strong>Config Sunucular\u0131:<\/strong> Shard cluster'\u0131n\u0131n metadata's\u0131n\u0131 (hangi verinin hangi sharda oldu\u011funu) saklar.<\/li>\n<\/ul>\n<p>Sharding ile uygulaman\u0131z, veri hacmi ve trafik artt\u0131k\u00e7a kolayca \u00f6l\u00e7eklenebilir. Yeni shardlar ekleyerek depolama kapasitesini ve i\u015flem g\u00fcc\u00fcn\u00fc art\u0131rabilirsiniz. Bu, \u00f6zellikle \u00e7ok b\u00fcy\u00fck veri k\u00fcmeleri ve y\u00fcksek e\u015fzamanl\u0131l\u0131k gerektiren uygulamalar i\u00e7in vazge\u00e7ilmez bir \u00f6zelliktir.<\/p>\n<div class=\"expert-tip\">\n      Uzman \u0130pucu: Sharding anahtar\u0131n\u0131z\u0131 (shard key) dikkatli se\u00e7mek kritik \u00f6neme sahiptir. Yanl\u0131\u015f bir shard anahtar\u0131, verilerin dengesiz da\u011f\u0131lmas\u0131na veya \"hotspot\" ad\u0131 verilen performans darbo\u011fazlar\u0131na yol a\u00e7abilir. Genellikle, s\u0131k sorgulanan ve yazma i\u015flemlerini da\u011f\u0131tabilecek bir alan se\u00e7ilir.\n    <\/div>\n<p>Aggregation Framework, Replica Setler ve Sharding, MongoDB'yi sadece k\u00fc\u00e7\u00fck projeler i\u00e7in de\u011fil, ayn\u0131 zamanda d\u00fcnyan\u0131n en b\u00fcy\u00fck ve en talepkar uygulamalar\u0131 i\u00e7in de g\u00fc\u00e7l\u00fc bir platform haline getiren temel \u00f6zelliklerdir. Bu ara\u00e7lar\u0131 do\u011fru bir \u015fekilde anlamak ve uygulamak, geli\u015ftiricilerin veri yo\u011fun ve \u00f6l\u00e7eklenebilir \u00e7\u00f6z\u00fcmler \u00fcretmesini sa\u011flar.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu kapsaml\u0131 rehber boyunca, MongoDB'nin temel prensiplerinden ba\u015flayarak geli\u015fmi\u015f veri modelleme, indeksleme ve b\u00fcy\u00fck \u00f6l\u00e7ekli mimari yakla\u015f\u0131mlar\u0131na kadar bir\u00e7ok konuyu ele ald\u0131k. MongoDB'nin esnek dok\u00fcman tabanl\u0131 yap\u0131s\u0131, geli\u015ftiricilere geleneksel ili\u015fkisel veritabanlar\u0131n\u0131n k\u0131s\u0131tlamalar\u0131ndan kurtulma ve modern, \u00e7evik uygulamalar geli\u015ftirme \u00f6zg\u00fcrl\u00fc\u011f\u00fc sunar. Ad\u0131m ad\u0131m kod \u00f6rnekleri sayesinde, veri ekleme, okuma, g\u00fcncelleme ve silme gibi temel CRUD i\u015flemlerini nas\u0131l ger\u00e7ekle\u015ftirebilece\u011finizi \u00f6\u011frendik. Ayr\u0131ca, Aggregation Framework ile karma\u015f\u0131k veri analizleri yapman\u0131n, Replica Setler ile y\u00fcksek eri\u015filebilirlik sa\u011flaman\u0131n ve Sharding ile yatay \u00f6l\u00e7eklenebilirli\u011fi yakalaman\u0131n yollar\u0131n\u0131 ke\u015ffettik. MongoDB, sadece bir veritaban\u0131 olman\u0131n \u00f6tesinde, veri odakl\u0131 modern uygulamalar\u0131n omurgas\u0131n\u0131 olu\u015fturan g\u00fc\u00e7l\u00fc ve \u00e7ok y\u00f6nl\u00fc bir platformdur.<\/p>\n<p>Geli\u015ftiriciler olarak, do\u011fru arac\u0131 do\u011fru i\u015f i\u00e7in se\u00e7menin ne kadar \u00f6nemli oldu\u011funu biliyoruz. MongoDB, esnek \u015femas\u0131, y\u00fcksek performans\u0131 ve \u00f6l\u00e7eklenebilirlik yetenekleri ile \u00f6zellikle s\u00fcrekli de\u011fi\u015fen veri yap\u0131lar\u0131na sahip, h\u0131zl\u0131 b\u00fcy\u00fcmesi beklenen veya y\u00fcksek veri hacmiyle \u00e7al\u0131\u015fan projeler i\u00e7in ideal bir se\u00e7imdir. \u00d6\u011frendi\u011finiz bu bilgilerle, MongoDB'yi projelerinize entegre etmeye ve potansiyelini tam olarak kullanmaya haz\u0131rs\u0131n\u0131z. Unutmay\u0131n, pratik yapmak ve ger\u00e7ek d\u00fcnya senaryolar\u0131nda \u00f6\u011frendiklerinizi uygulamak, bilgilerinizi peki\u015ftirmenin en iyi yoludur. \u0130yi kodlamalar!<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<div class=\"faq\">\n<h4>MongoDB mi yoksa ili\u015fkisel bir veritaban\u0131 m\u0131 kullanmal\u0131y\u0131m?<\/h4>\n<p>Bu, projenizin gereksinimlerine ba\u011fl\u0131d\u0131r. E\u011fer verileriniz y\u00fcksek derecede yap\u0131land\u0131r\u0131lm\u0131\u015fsa, ili\u015fkiler karma\u015f\u0131ksa ve ACID uyumlulu\u011fu kritikse (\u00f6rn: finans uygulamalar\u0131), ili\u015fkisel veritabanlar\u0131 daha uygun olabilir. Ancak, h\u0131zl\u0131 geli\u015fime ihtiyac\u0131n\u0131z varsa, \u015fema esnekli\u011fi \u00f6nemliyse, veri modeliniz dinamikse veya yatay \u00f6l\u00e7eklenebilirlik \u00f6nceli\u011finizse (\u00f6rn: i\u00e7erik y\u00f6netim sistemleri, IoT, mobil uygulamalar), MongoDB gibi NoSQL \u00e7\u00f6z\u00fcmleri daha avantajl\u0131d\u0131r. \u00c7o\u011fu modern uygulamada hibrit yakla\u015f\u0131mlar da kullan\u0131lmaktad\u0131r.<\/p>\n<\/p><\/div>\n<div class=\"faq\">\n<h4>MongoDB'de JOIN i\u015flemi var m\u0131?<\/h4>\n<p>Do\u011frudan SQL'deki gibi bir JOIN operat\u00f6r\u00fc bulunmamaktad\u0131r. Ancak, MongoDB'nin Aggregation Framework'\u00fc i\u00e7indeki <code>$lookup<\/code> operat\u00f6r\u00fc, tek bir sorguda di\u011fer koleksiyonlardaki verileri birle\u015ftirerek benzer bir i\u015flevsellik sa\u011flar. Genellikle, iyi tasarlanm\u0131\u015f bir veri modeliyle <code>$lookup<\/code> kullan\u0131m\u0131na olan ihtiyac\u0131 minimize etmek, okuma performans\u0131n\u0131 art\u0131r\u0131r.<\/p>\n<\/p><\/div>\n<div class=\"faq\">\n<h4>MongoDB'nin veri tutarl\u0131l\u0131\u011f\u0131 garanti seviyeleri nelerdir?<\/h4>\n<p>MongoDB, varsay\u0131lan olarak \"eventual consistency\" (nihai tutarl\u0131l\u0131k) sa\u011flar, ancak yazma ve okuma i\u015flemleri i\u00e7in \u00e7e\u015fitli \"write concern\" ve \"read concern\" seviyeleri belirleyerek tutarl\u0131l\u0131k garantilerini art\u0131rabilirsiniz. \u00d6rne\u011fin, <code>{ w: \"majority\" }<\/code> write concern, yazma i\u015fleminin replica set'in \u00e7o\u011funlu\u011funa yaz\u0131ld\u0131\u011f\u0131nda ba\u015far\u0131l\u0131 say\u0131lmas\u0131n\u0131 sa\u011flar ve daha y\u00fcksek veri tutarl\u0131l\u0131\u011f\u0131 sunar. <code>\"primary\"<\/code> read concern, sadece primary d\u00fc\u011f\u00fcmden okuma yap\u0131lmas\u0131n\u0131 garanti eder, bu da her zaman en g\u00fcncel veriyi alman\u0131z\u0131 sa\u011flar.<\/p>\n<\/p><\/div>\n<div class=\"faq\">\n<h4>MongoDB'yi \u00f6\u011frenmek zor mu? Hangi programlama dilleriyle uyumludur?<\/h4>\n<p>MongoDB'nin \u00f6\u011frenme e\u011frisi genellikle d\u00fc\u015f\u00fckt\u00fcr, \u00f6zellikle de JSON veya benzeri veri yap\u0131lar\u0131na a\u015fina iseniz. Sorgulama dili ve API'si olduk\u00e7a sezgiseldir. MongoDB, bir\u00e7ok pop\u00fcler programlama dili i\u00e7in resmi s\u00fcr\u00fcc\u00fcler (driver) sunar. Bunlar aras\u0131nda JavaScript (Node.js), Python, Java, C#, Go, PHP, Ruby, Swift ve daha bir\u00e7ok dil bulunmaktad\u0131r. Bu durum, tercih etti\u011finiz dil ne olursa olsun MongoDB'yi kolayca entegre edebilece\u011finiz anlam\u0131na gelir.<\/p>\n<\/p><\/div>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Modern uygulama geli\u015ftirmenin h\u0131zla de\u011fi\u015fen d\u00fcnyas\u0131nda, veri y\u00f6netimi her zamankinden daha kritik hale gelmi\u015ftir. Peki, esnek, \u00f6l\u00e7eklenebilir ve&hellip;","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-35315","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 Geli\u015ftiricileri \u0130\u00e7in Kapsaml\u0131 Rehber: Kod \u00d6rnekleriyle<\/title>\n<meta name=\"description\" content=\"Modern uygulama geli\u015ftirmenin h\u0131zla de\u011fi\u015fen d\u00fcnyas\u0131nda, veri y\u00f6netimi her zamankinden daha kritik hale gelmi\u015ftir. Peki, esnek, \u00f6l\u00e7eklenebilir ve y\u00fcksek performansl\u0131 bir veritaban\u0131 \u00e7\u00f6z\u00fcm\u00fc aray\u0131\u015f\u0131n\u0131zda hangi teknolojiye g\u00fcvenmelisiniz? MongoDB, sundu\u011fu dok\u00fcman tabanl\u0131 yakla\u015f\u0131mla geli\u015ftiricilere e\u015fsiz bir \u00f6zg\u00fcrl\u00fck ve h\u0131z sunarak bu sorunun cevab\u0131 olmaya devam ediyor. Bu rehberde, MongoDB&#039;nin temel prensiplerinden ileri d\u00fczey kullan\u0131m senaryolar\u0131na kadar her \u015feyi ad\u0131m ad\u0131m, pratik kod \u00f6rnekleriyle ke\u015ffedece\u011fiz. Art\u0131k geleneksel veritaban\u0131 k\u0131s\u0131tlamalar\u0131na elveda deme zaman\u0131!\" \/>\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-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"MongoDB Geli\u015ftiricileri \u0130\u00e7in Kapsaml\u0131 Rehber: Kod \u00d6rnekleriyle\" \/>\n<meta property=\"og:description\" content=\"Modern uygulama geli\u015ftirmenin h\u0131zla de\u011fi\u015fen d\u00fcnyas\u0131nda, veri y\u00f6netimi her zamankinden daha kritik hale gelmi\u015ftir. Peki, esnek, \u00f6l\u00e7eklenebilir ve y\u00fcksek performansl\u0131 bir veritaban\u0131 \u00e7\u00f6z\u00fcm\u00fc aray\u0131\u015f\u0131n\u0131zda hangi teknolojiye g\u00fcvenmelisiniz? MongoDB, sundu\u011fu dok\u00fcman tabanl\u0131 yakla\u015f\u0131mla geli\u015ftiricilere e\u015fsiz bir \u00f6zg\u00fcrl\u00fck ve h\u0131z sunarak bu sorunun cevab\u0131 olmaya devam ediyor. Bu rehberde, MongoDB&#039;nin temel prensiplerinden ileri d\u00fczey kullan\u0131m senaryolar\u0131na kadar her \u015feyi ad\u0131m ad\u0131m, pratik kod \u00f6rnekleriyle ke\u015ffedece\u011fiz. Art\u0131k geleneksel veritaban\u0131 k\u0131s\u0131tlamalar\u0131na elveda deme zaman\u0131!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/mongodb-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-28T03:31:39+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=\"26 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mongodb-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mongodb-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"MongoDB Geli\u015ftiricileri \u0130\u00e7in Kapsaml\u0131 Rehber: Kod \u00d6rnekleriyle\",\"datePublished\":\"2025-11-28T03:31:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mongodb-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/\"},\"wordCount\":4024,\"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-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mongodb-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/mongodb-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/\",\"name\":\"MongoDB Geli\u015ftiricileri \u0130\u00e7in Kapsaml\u0131 Rehber: Kod \u00d6rnekleriyle\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-28T03:31:39+00:00\",\"description\":\"Modern uygulama geli\u015ftirmenin h\u0131zla de\u011fi\u015fen d\u00fcnyas\u0131nda, veri y\u00f6netimi her zamankinden daha kritik hale gelmi\u015ftir. Peki, esnek, \u00f6l\u00e7eklenebilir ve y\u00fcksek performansl\u0131 bir veritaban\u0131 \u00e7\u00f6z\u00fcm\u00fc aray\u0131\u015f\u0131n\u0131zda hangi teknolojiye g\u00fcvenmelisiniz? MongoDB, sundu\u011fu dok\u00fcman tabanl\u0131 yakla\u015f\u0131mla geli\u015ftiricilere e\u015fsiz bir \u00f6zg\u00fcrl\u00fck ve h\u0131z sunarak bu sorunun cevab\u0131 olmaya devam ediyor. Bu rehberde, MongoDB'nin temel prensiplerinden ileri d\u00fczey kullan\u0131m senaryolar\u0131na kadar her \u015feyi ad\u0131m ad\u0131m, pratik kod \u00f6rnekleriyle ke\u015ffedece\u011fiz. Art\u0131k geleneksel veritaban\u0131 k\u0131s\u0131tlamalar\u0131na elveda deme zaman\u0131!\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mongodb-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/mongodb-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/mongodb-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"MongoDB Geli\u015ftiricileri \u0130\u00e7in Kapsaml\u0131 Rehber: Kod \u00d6rnekleriyle\"}]},{\"@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 Geli\u015ftiricileri \u0130\u00e7in Kapsaml\u0131 Rehber: Kod \u00d6rnekleriyle","description":"Modern uygulama geli\u015ftirmenin h\u0131zla de\u011fi\u015fen d\u00fcnyas\u0131nda, veri y\u00f6netimi her zamankinden daha kritik hale gelmi\u015ftir. Peki, esnek, \u00f6l\u00e7eklenebilir ve y\u00fcksek performansl\u0131 bir veritaban\u0131 \u00e7\u00f6z\u00fcm\u00fc aray\u0131\u015f\u0131n\u0131zda hangi teknolojiye g\u00fcvenmelisiniz? MongoDB, sundu\u011fu dok\u00fcman tabanl\u0131 yakla\u015f\u0131mla geli\u015ftiricilere e\u015fsiz bir \u00f6zg\u00fcrl\u00fck ve h\u0131z sunarak bu sorunun cevab\u0131 olmaya devam ediyor. Bu rehberde, MongoDB'nin temel prensiplerinden ileri d\u00fczey kullan\u0131m senaryolar\u0131na kadar her \u015feyi ad\u0131m ad\u0131m, pratik kod \u00f6rnekleriyle ke\u015ffedece\u011fiz. Art\u0131k geleneksel veritaban\u0131 k\u0131s\u0131tlamalar\u0131na elveda deme zaman\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-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/","og_locale":"tr_TR","og_type":"article","og_title":"MongoDB Geli\u015ftiricileri \u0130\u00e7in Kapsaml\u0131 Rehber: Kod \u00d6rnekleriyle","og_description":"Modern uygulama geli\u015ftirmenin h\u0131zla de\u011fi\u015fen d\u00fcnyas\u0131nda, veri y\u00f6netimi her zamankinden daha kritik hale gelmi\u015ftir. Peki, esnek, \u00f6l\u00e7eklenebilir ve y\u00fcksek performansl\u0131 bir veritaban\u0131 \u00e7\u00f6z\u00fcm\u00fc aray\u0131\u015f\u0131n\u0131zda hangi teknolojiye g\u00fcvenmelisiniz? MongoDB, sundu\u011fu dok\u00fcman tabanl\u0131 yakla\u015f\u0131mla geli\u015ftiricilere e\u015fsiz bir \u00f6zg\u00fcrl\u00fck ve h\u0131z sunarak bu sorunun cevab\u0131 olmaya devam ediyor. Bu rehberde, MongoDB'nin temel prensiplerinden ileri d\u00fczey kullan\u0131m senaryolar\u0131na kadar her \u015feyi ad\u0131m ad\u0131m, pratik kod \u00f6rnekleriyle ke\u015ffedece\u011fiz. Art\u0131k geleneksel veritaban\u0131 k\u0131s\u0131tlamalar\u0131na elveda deme zaman\u0131!","og_url":"https:\/\/fatihsoysal.com\/blog\/mongodb-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-28T03:31:39+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"26 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/mongodb-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/mongodb-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"MongoDB Geli\u015ftiricileri \u0130\u00e7in Kapsaml\u0131 Rehber: Kod \u00d6rnekleriyle","datePublished":"2025-11-28T03:31:39+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/mongodb-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/"},"wordCount":4024,"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-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/mongodb-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/","url":"https:\/\/fatihsoysal.com\/blog\/mongodb-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/","name":"MongoDB Geli\u015ftiricileri \u0130\u00e7in Kapsaml\u0131 Rehber: Kod \u00d6rnekleriyle","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-28T03:31:39+00:00","description":"Modern uygulama geli\u015ftirmenin h\u0131zla de\u011fi\u015fen d\u00fcnyas\u0131nda, veri y\u00f6netimi her zamankinden daha kritik hale gelmi\u015ftir. Peki, esnek, \u00f6l\u00e7eklenebilir ve y\u00fcksek performansl\u0131 bir veritaban\u0131 \u00e7\u00f6z\u00fcm\u00fc aray\u0131\u015f\u0131n\u0131zda hangi teknolojiye g\u00fcvenmelisiniz? MongoDB, sundu\u011fu dok\u00fcman tabanl\u0131 yakla\u015f\u0131mla geli\u015ftiricilere e\u015fsiz bir \u00f6zg\u00fcrl\u00fck ve h\u0131z sunarak bu sorunun cevab\u0131 olmaya devam ediyor. Bu rehberde, MongoDB'nin temel prensiplerinden ileri d\u00fczey kullan\u0131m senaryolar\u0131na kadar her \u015feyi ad\u0131m ad\u0131m, pratik kod \u00f6rnekleriyle ke\u015ffedece\u011fiz. Art\u0131k geleneksel veritaban\u0131 k\u0131s\u0131tlamalar\u0131na elveda deme zaman\u0131!","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/mongodb-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/mongodb-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/mongodb-gelistiricileri-icin-kapsamli-rehber-kod-ornekleriyle\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"MongoDB Geli\u015ftiricileri \u0130\u00e7in Kapsaml\u0131 Rehber: Kod \u00d6rnekleriyle"}]},{"@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\/35315","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=35315"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35315\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35315"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35315"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35315"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}