SlideShare a Scribd company logo
MongoDB Overview
MongoDB
MongoDB NoSQL Database
Cihan Özhan | DeepLab.co | Founder, AI Engineer, Mentor
MongoDB Nedir?
• MongoDB bir döküman veritabanıdır.
• NoSQL veritabanları ile girişte görüldüğü gibi, satırların(veya MongoDB'de dökümanlar) önceden
tanımlanmış şemaya sahip olmasına gerek yoktur.
• MongoDB'de bulunan veri modeli, hiyerarşik ilişkileri temsil etmenize, dizileri depolamanıza ve diğer
daha karmaşık yapıları daha kolay bir şekilde göstermenize olanak tanır.
• MongoDB ortamları oldukça ölçeklenebilir.
MongoDB Geçmişi
• MongoDB, 2007 yılında Eliot Horowitz ve Dwight Merriman tarafından geliştirildi.
• Dwight Merriman'a göre bu veritabanı adı, büyük miktarda veriyi işleme fikrini desteklemek için
humongous kelimesinden türetildi.
• 2009 yılında MongoDB açık kaynaklı bir proje olarak yapılırken, şirket ticari destek hizmetleri
sunmuştur.
– Pek çok şirket, şaşırtıcı birçok özelliği için MongoDB'yi kullanmaya başladı.
• New York Times gazetesi, fotoğrafları göndermek için web tabanlı bir uygulama oluşturmak için
MongoDB'yi kullandı.
• MongoDB'nin ilk hazır üretimi, Mart 2010'da piyasaya sürülen 1.4 sürümünden düşünüldü.
• 2013 yılında şirket resmi olarak MongoDB Inc.'e seçildi.
• Bundan sonra MongoDB 2.4.9, 10 Ocak 2014'te yayınlandı.
• MongoDB 4.0.3, mevcut en son ve kararlı sürümdür.
MongoDB'de Genel Terimler
• _id
– The _id field represents a unique value in the MongoDB document. The _id fields is like the document's primary key.
• collection
– Bu, MongoDB dökümanlarından oluşan bir gruptur.
• cursor
– Bu, bir sorgunun sonuç kümesine bir göstericidir.
• database
– Bu, koleksiyonlar için bir kaptır. Her veritabanı, dosya sisteminde kendi dosya kümesini alır.
• document
– MongoDB koleksiyonundaki bir kayda temelde belge denir.
• field
– Bir belgedeki ad-değer çiftidir.
MongoDB Overview
MongoDB Kullanan Kuruluşlar
• MongoDB'yi iş uygulamalarının çoğu için veritabanı olarak kullanan bazı büyük ve önemli kuruluşlar
aşağıdadır:
– LinkedIn
– eBay
– SAP
– Adobe
– McAfee
– FourSquare
– MetLife
MongoDB'nin Özellikleri
• Ad-Hoc Sorgu Desteği
• Aggregation
• Yüksek Performans
• Yatay Ölçeklenebilirlik (Horizontal Scalability)
• Geniş Media Desteği
• Yük Dengeleme (Load Balancing)
• Replication
• Index
• GridFS
• MapReduce
• Auto-Sharding
MongoDB'nin Avantajları
• Open Source
• Parçalama (Sharding)
• Daha Hızlı İşlem(Process)
• Schemaless
• Document-Based
• No SQL Injection
MongoDB vs. MySQL
MongoDB MySQL
Birçok alternatif veri modeli İlişkisel veritabanı yönetim sistemi
Schemaless Schema
Atomikliği destekler Transactional Relational Data Store
JSON query SQL
Server-Side Scripting Stored Procedures Implemented
Yüksek Ölçekli Ölçeklenebilir Değil
Daha Hızlı Daha Yavaş
MongoDB vs. Cassandra
Cassandra MongoDB
Cassandra, yüksek performanslı dağıtılmış
veritabanı sistemidir.
MongoDB, platformlar arası döküman odaklı
veritabanı sistemidir.
Cassandra Java ile yazılmıştır. MongoDB, C++ ile yazılmıştır
Cassandra, verileri SQL biçimi gibi tablo
biçiminde depolar.
MongoDB, verileri JSON biçiminde depolar.
Cassandra Apache lisansına sahiptir. MongoDB, AGPL lisansına ve Apache
driver’larına sahiptir.
Cassandra temelde büyük miktarda veriyi
işlemek için tasarlanmıştır.
MongoDB, JSON benzeri dökümanlarla başa
çıkmak ve uygulamalara daha kolay ve daha
hızlı erişmek için tasarlanmıştır.
Cassandra, tek bir hata noktası olmadan
yüksek kullanılabilirlik sağlar.
MongoDB'nin başarısızlık durumunda
yönetilmesi kolaydır.
MongoDB CouchDB
Document-Based modeli takip ederse ve
veriler JSON formatında sunulur.
Document-oriented modeli takip ederse ve
veriler JSON formatında sunulur.
Binary protokol ve TCP/IP üzerinden özel
protokol kullanır.
HTTP/REST tabanlı arayüz kullanır. Çok
sezgiseldir ve çok iyi tasarlanmıştır.
Veritabanı koleksiyonları ve koleksiyon
dökümanları içerir.
CouchDB'de veritabanı dökümanları içerir.
MongoDB, collection + object-based sorgu dili
oluşturarak Map/Reduce(JavaScript)'i izler.
Map/Reduce sorgu yöntemini izler. (JavaScript
+ Diğerleri)
master-slave replication’ı destekler. Custom conflict resolution function’lar ile
master-master çoğaltmayı destekler.
Yerinde güncelleme MVVC’yi takip eder.(Multi Version Concurrency
Control)
MongoDB tutarlılığı destekler. Availability’I destekler.
MongoDB son derece tutarlıdır. CouchDB tutarlıdır.
C++ ile geliştirildi. Erlang dilinde yazıldı.
MongoDB vs. CouchDB
MongoDB Redis
Document-store yapısını takip eden en popüler
NoSQL veritabanlarından biridir.
Veritabanı, önbellek ve mesaj aracısı olarak
kullanılan bellek içi veri yapısı deposudur.
Document-store modelini takip eder. Redis, key-value store modelini takip eder.
MongoDB Inc. tarafından geliştirilmiştir. Salvatore Sanfilippo tarafından geliştirildi.
Ücretsiz ve açık kaynaklıdır. Subscription-based ve açık kaynaklıdır.
C++ ile geliştirildi. Redis, C dilinde yazılmış ve uygulanmıştır.
Sunucu işletim sistemleri Linux, OS X, Solaris,
Windows'dur.
Sunucu işletim sistemleri BSD, Linux, OS X,
Windows'dur.
İkincil index içerir. İkincil index desteklemez.
JSON kullan. Proprietary Protocol’ü takip eder. Proprietary Protocol’ü takip eder.
Sunucu Tarafı komut dosyası JavaScript'tir Redis'teki Sunucu Tarafı komut dosyası Lua’dır.
MapReduce var. MapReduce'a sahip değil
MongoDB vs. Redis
MongoDB Redis
Nihai Tutarlılık Eventual Consistency ve Immediate Consistency
Kullanıcılar ve roller için erişim hakları. Basit password-based erişim kontrolü
Yeni nesil veritabanı olarak kabul ediliyor. Dünyanın en hızlı veritabanı olarak
derecelendirilmiştir.
MongoDB, günümüz uygulamalarının
gerektirdiği esneklik, ölçek ve performansın
yanı sıra geleneksel veritabanlarının en
iyisini sağlar.
Redis, bir bellek içi veritabanı platformudur;
strings, hashes, sets, lists, sorted sets, bitmaps,
hyperloglogs ve geospatial index gibi çok çeşitli
veri yapıları için destek sağlar.
30 milyon indirme(her gün binlerce indirme
ile artıyor). Fortune 100'ün üçte birinden
fazlası dahil 3.000'den fazla müşteri.
Redis Labs, dünya çapında 60000'den fazla
müşteriden oluşur ve NoSQL, bellek içi ve
operasyonel veritabanları hakkındaki en iyi analist
raporlarında tutarlı bir şekilde lider olarak sıralanır.
MongoDB vs. Redis
MongoDB Neden Kullanılmalı?
• Document-Oriented
• Ad-Hoc Queries
• Indexing
• Replication
• Load Balancing
• Flexibility
– MongoDB'deki veriler esnek bir şemaya sahiptir. Koleksiyonlar belge yapısını zorlamaz.
– Bu esneklik, uygulamanıza ve performans gereksinimlerine uygun veri modelleme seçenekleri
sunar.
• Scalability
– Verilerin boyutu arttıkça, tek bir makine verileri depolamak veya kabul edilebilir bir okuma ve
yazma verimi sağlamak için yeterli olmayabilir.
– Sharding, sorunu yatay ölçeklemeyle çözer. Sharding, veri büyümesinin taleplerini karşılamak
için MongoDB'nin izlediği yaklaşımdır.
• Performance
– MongoDB, MySQL'den 2 ila 10 kat ve CouchDB'den 50 kat daha hızlıdır.
MongoDB Ne Zaman Kullanılmalı?
• Veri Ekleme Tutarlılığı
• Data Corruption Recovery (Veri Kurtarma)
• Load Balancing
• JOIN’lerden Kaçınmak İçin
• Şema Değişiklikleri İçin En Uygun Yol
• İlişkisel Veri Değil
MongoDB Shell
MongoDB Shell
(MongoDB Shell Quick Reference)
Command Line Options
Option Description
--help Komut satırı seçeneklerini göster
--nodb Veritabanına bağlanmadan akıllı mongo shell
--shell JavaScript dosyasını çalıştırdıktan sonra
mongo kabuğunda devam etmek için bir
JavaScript dosyasıyla (yani <file.js>) birlikte
kullanılır.
Command Helpers
Help Methods & Commands Description
help Show help
db.help() Show help for database methods.
db.<collection>.help() Show help on collection methods.
show dbs Print a list of all databases on the server.
use <db> Switch current database to <db>
show collections Print a list of all collections for current database.
show users Print a list of users for current database.
show roles Print a list of all roles, ot user-defined and built-in, for
the current database.
show profile Print the five most recent operations that took 1
millisecond or more.
show databases Print a list of all available databases.
load() Execute a JavaScript file.
Temel Shell JavaScript Operasyonları
JavaScript DB Operations Description
db.auth() If running in secure mode, authenticate the user.
coll = db.<collection> Set a specific collection in the current database to a variable coll.
db.collection.find() Find all documents in the collection and returns a cursor.
db.collection.insertOne() Insert a new document into the collection.
db.collection.insertMany() Insert multiple new documents into the collection.
db.collection.updateOne() Update a single existing document in the collection.
db.collection.updateMany() Update multiple existing documents in the collection.
db.collection.save() Insert either a new document or update an existing document in the
collection.
db.collection.deleteOne() Delete a single document from the collection.
db.collection.deleteMany() Delete documents from the collection.
db.collection.drop() Drops or removes completely the collection.
db.collection.createIndex() Create a new index on the collection if the index does not exist.
db.getSiblingDB() Return a reference to another database using this same connection
without explicitly switching the current database. This allows for cross
database queries.
Keyboard Shortcuts
Keystroke Function
Up + Arrow / CTRL - P Previous-Histroy
Down-Arrow / CTRL - N Next-History
Home / CTRL - A Beginning-of-Line
End / CTRL - E End-of-Line
Tab Automcomplete
Left + Arrow / CTRL + B Backward-Character
Right + Arrow / CTRL + F Forward-Character
CTRL + Left + Arrow / Meta + Left + Arrow / Meta + B Backward-Word
CTRL + Right + Arrow / Meta + Right + Arrow / Meta + F Forward-Word
CTRL + C Exit-Shell
CTRL + D Delete-Char (or Exit Shell)
CTRL + G Abort
Keyboard Shortcuts
Keystroke Function
CTRL + J / CTRL + M Accept-Line
CTRL + K Kill-Line
CTRL + L Clear-Screen
CTRL + R Reverse-Search-History
CTRL + S Forward-Search-History
CTRL + T Transpose-Chars
CTRL + H (i.e Backspace) Backward-Delete-Char
CTRL + I (i.e Tab) Complete
Meta + C Capitalize-Word
Meta + L Downcase-Word
Meta + U Upcase-Word
Meta + < Beginning-of-History
Meta + > End-of-History
RDBMS’leri MongoDB ile Eşleme
MongoDB Overview
MongoDB Overview
MongoDB Veritipleri
DataType Description
Double Used to stored floating point values.
String Commonly used datatype ad it is UTF-8 valid.
Object Used for storing embedded objects
Array Used for storing embedded objects
Binary Data Used to store binary data
Undefined Used to store undefined value
Object Id Used to store document's ID
Boolean Used to store Boolean value
Date Used to store current date time in UNIX format.
Null Used to store null value
Regular Expression Used to store regex
JavaScript Used to store JavaScript data without scope
Symbol Basically used to store string, but reserved for languages that use specific symbol
JavaScript with Scope Used to store JavaScript data with scope
Integer Used to store numerical value
Timestamp Used to track when a docuyment is modified
Min / Max Key Used to compare value against lowest and highest BSON elements.
Database
• Veritabanı, koleksiyonlar için fiziksel bir konteynırdır.
• MongoDB'de CREATE DATABASE komutu yoktur.
• MongoDB'de veritabanını manuel olarak oluşturmanız gerekmez.
• Koleksiyona döküman kaydettiğinizde otomatik olarak veritabanı oluşturulacaktır.
• use Komutu:
– MongoDB'de veritabanı oluşturmak için use komutu kullanılır.
– Komut, mevcut değilse yeni bir veritabanı oluşturur, aksi takdirde mevcut veritabanını döndürür.
– Syntax
• use DATABASE_NAME
• dropDatabase() Metodu
– dropDatabase() command is used to drop an existing database in MongoDB.
– Syntax
• db.dropDatabase()
Database
> use mydb
> db
> show dbs
> db.movie.insert({"name":"mongodb"})
> show dbs
> db.dropDatabase()
> show dbs
Collection
• Koleksiyon, MongoDB dökümanlarından oluşan bir gruptur.
• RDBMS’deki tablonun eşdeğeridir.
• Koleksiyonlar açıkça veya otomatik olarak oluşturulabilir.
• MongoDB, birkaç döküman eklediğinizde otomatik olarak koleksiyon oluşturur.
• createCollection() method is used to create collections explicitly in MongoDB:
– db.createCollection(name, options)
Field Type Description
Capped Boolean True olarak ayarlanmışsa, sınırlı bir koleksiyonu etkinleştirir.
AutoIndexID Boolean True olarak ayarlanmışsa, ID alanında otomatik olarak indeks oluşturur.
Varsayılan değeri false.
Size Number Sınırlı bir koleksiyon için bayt cinsinden maksimum boyutu belirtir.
Sınırlanmış doğruysa, bu alanı da belirtmeniz gerekir.
Max Number Sınırlı koleksiyonda izin verilen maksimum belge sayısını belirtir.
Documents
• Doküman, bir dizi key/value’dur.
• Dökümanlar dinamik şemaya sahiptir.
• MongoDB verileri BSON dökümanlar olarak saklar.
Döküman Yapısı
Örnek
Collections
(Alan Adlarına İlişkin Kısıtlamalar)
• _id alan adı, Primary Key olarak kullanılmak üzere ayrılmıştır; değeri koleksiyonda benzersiz olmalıdır,
değişmezdir ve bir dizi dışında herhangi bir türde olabilir.
• Alan adları boş karakter içeremez.
• Top-Level alan adları dolar işareti($) karakteriyle başlayamaz.
• Aksi takdirde sunucu, noktalar(yani) ve dolar işaretleri(yani $) içeren alan adlarının depolanmasına izin
verir.
Collections
(Alan Adlarına İlişkin Kısıtlamalar)
• Document Size Limit
– Maksimum BSON dökümanı boyutu 16 megabayttır.
• Document Field Order
– MongoDB, aşağıdaki durumlar dışında, yazma işlemlerinin ardından belge alanlarının sırasını korur:
• _id alanı her zaman belgedeki ilk alandır.
• Alan adlarının yeniden adlandırılmasını içeren güncellemeler, dökümandaki alanların yeniden
sıralanmasına neden olabilir.
• The _id Field
– _id alanı aşağıdaki davranışa ve kısıtlamalara sahiptir:
• Varsayılan olarak MongoDB, bir koleksiyonun oluşturulması sırasında _id alanında benzersiz bir
dizin oluşturur.
• _id alanı her zaman belgelerdeki ilk alandır.
• _id alanı, bir dizi dışında herhangi bir BSON veri türünün değerlerini içerebilir.
Collections
(Karşılaştırma veya Sıralama Düzeni)
Farklı BSON Tiplerinin Değerlerinin Karşılaştırılması
Order Data Types
1 MinKey (Internal Type)
2 Null
3 Numbers (ints, longs, doubles)
4 Symbol, String
5 Object
6 Array
7 BinData
8 ObjectId
9 Boolean
10 Date, Timestamp
11 Regular Expression
12 MaxKey (Internal Type)
Collections
(Insert Documents)
• Tekil Bir Döküman Eklemek
– insertOne() yöntemi, bir koleksiyona tek bir belge eklemek için kullanılır.
– Syntax
• db.COLLECTION_NAME.insertOne(document)
– Eklenen belgeleri almak için koleksiyonu sorgulayın:
• db.COLLECTION_NAME({})
• Insert için Ek Yöntemler:
– db.collection.update()
– db.collection.updateOne()
– db.collection.updateMany()
– db.collection.findAndModify()
– db.collection.findOneAndUpdate()
– db.collection.findOneAndReplace()
– db.collection.save()
– db.collection.bulkWrite()
Collections
(Query Documents)
• The find() Method
– MongoDB koleksiyonundan veri sorgulamak için MongoDB'nin find() yöntemi kullanılır.
– Syntax
• db.COLLECTION_NAME.find()
• The pretty() Method
– Sonuçları biçimlendirilmiş bir şekilde görüntülemek için pretty() yöntemi kullanılır.
– Syntax
• db.COLLECTION_NAME.find().pretty()
Operation Syntax
Equality {<key> : <value>}
Less Than {<key> : {$lt : <value>}}
Less Than Equals {<key> : {$lte : <value>}}
Greater Than {<key> : {$gt : <value>}}
Greater Than Equals {<key> : {$gte : <value>}}
Not Equals {<key> : {$ne : <value>}}
Collections
(AND & OR)
• AND
– Find() yönteminde, birden çok anahtarı "" ile ayırarak geçirirseniz, MongoDB bunu AND koşulu
olarak kabul eder.
Syntax
• OR
– OR koşuluna göre belgeleri sorgulamak için $ veya anahtar sözcüğünü kullanmanız gerekir.
Syntax
Bulk Operasyonları
• MongoDB, istemcilere yazma işlemlerini toplu olarak gerçekleştirme yeteneği sağlar.
• Toplu yazma işlemleri tek bir koleksiyonu etkiler.
• db.collection.bulkWrite() yöntemi, toplu ekleme, güncelleme ve kaldırma işlemleri gerçekleştirme
yeteneği sağlar.
• MongoDB ayrıca db.collection.insertMany() aracılığıyla toplu eklemeyi destekler
• Varsayılan olarak, bulkWrite() ordered işlemleri gerçekleştirir.
• Unordered yazma işlemlerini belirtmek için seçenekler dökümanında ordered:false değerini ayarlayın.
Bulk Operasyonları
(Ordered ve Unordered İşlemler)
• Toplu yazma işlemleri sıralı veya sırasız olabilir.
• Sıralı bir işlem listesi ile MongoDB işlemleri seri olarak yürütürken, Sırasız işlem listesi ile MongoDB,
işlemleri paralel olarak yürütebilir.
• Sharded(parçalanmış) bir koleksiyon üzerinde sıralı bir işlem listesi yürütmek, genellikle sırasız bir
liste yürütmekten daha yavaş olacaktır.
• Varsayılan olarak, bulkWrite() ordered işlemleri gerçekleştirir. Unordered yazma işlemlerini
belirtmek için seçenekler belgesinde sıralı: yanlış değerini ayarlayın.
• bulkWrite() Metodları:
– insertOne
– updateOne
– updateMany
– replaceOne
– deleteOne
– deleteMany
Her yazma işlemi, bir dizideki belge olarak bulkWrite() öğesine iletilir.
Retryable Writes
• Yeniden denenebilir yazma işlemleri, MongoDB sürücülerinin, ağ hatalarıyla karşılaşırlarsa veya replica
set’lerinde ya da sharded cluster sağlıklı bir primary key bulamazlarsa, belirli yazma işlemlerini tek
seferde otomatik olarak yeniden denemelerine olanak tanır.
• Prerequisites:
– Desteklenen Dağıtım Topolojileri
– Desteklenen Depolama Motoru
– MongoDB Drivers
– MongoDB VersionMongoDB Version
• Retryable Writes & Multi-Document Transactions:
– MongoDB sürücüleri, transaction commit ve abort operation dışında varsayılan olarak yeniden
denenebilir yazmaları etkinleştirmez.
– MongoDB Drivers:
• MongoDB driver’ında retryable writes’ı etkinleştirmek için connection string retryWrites
seçeneğini ekleyin:
– mongodb://localhost/?retryWrites=true
• Mongo Shell
– Mongo kabuğunda yeniden denenebilir yazmaları etkinleştirmek için --retryWrites
komut satırı seçeneğini kullanın:
» mongo --retryWrites
Retryable Writes
(Retryable Write Operasyonları)
Methods Descriptions
db.collection.findAndModify() findAndModify işlemleri.
Tüm findAndModify işlemleri tek döküman işlemleridir.
db.collection.findOneAndDelete()
db.collection.findOneAdReplace()
db.collection.findOneAndUpdate()
insertOne() Yalnızca single-document yazma işlemlerinden oluşan toplu
yazma işlemleri.
updateOne()
replaceOne()
deleteOne()
Bulk.find.removeOne() Yalnızca single-document yazma işlemlerinden oluşan toplu
yazma işlemleri.
Bulk.find.replaceOne()
Bulk.find.replaceOne()
Text Search
• MongoDB, dize içeriğinde metin araması gerçekleştiren sorgu işlemlerini destekler.
• MongoDB, dize içeriği üzerinde metin arama sorgularını desteklemek için metin index’leri sağlar.
• Metin index’leri, değeri bir string veya dizi olan herhangi bir alanı içerebilir.
• Metin arama sorguları gerçekleştirmek için koleksiyonunuzda bir text index olması gerekir.
• Bir koleksiyonun yalnızca bir text search index’i olabilir, ancak bu index birden çok alanı kapsayabilir.
• Text Search in Query Framework:
– $text sorgu operatörü, bir metin dizini içeren bir koleksiyonda metin aramaları gerçekleştirmek
için kullanılır.
• Text Search in the Aggregation Pipeline:
– In the aggregation pipeline, text search is available via the use of the $text query operator in the
$match stage.
• Kısıtlamalar
– $text içeren $match aşaması, pipeline hattındaki ilk aşama olmalıdır.
Geospatial Queries
(GeoJSON Objects)
• Dünya benzeri bir küre üzerinde geometriyi hesaplamak için, konum verilerinizi GeoJSON nesneleri
olarak saklayın.
• GeoJSON verilerini belirtmek için aşağıdakileri içeren bir embedded-document kullanın:
– GeoJSON nesne türünü belirten type adlı bir alan ve…
– nesnenin koordinatlarını belirten coordinates adlı bir alan.
• Enlem ve boylam koordinatlarını belirtiyorsanız, önce boylamı, ardından enlemi listeleyin:
– Geçerli boylam değerleri, her ikisi de dahil olmak üzere -180 ile 180 arasındadır.
– Geçerli enlem değerleri -90 ile 90 arasındadır (her ikisi dahil).
• Syntax
– <field> : { type: <GeoJSON type>, coordinates: <coordinates>}
Geospatial Queries
(Legacy Coordinate Pairs)
• Bir Euclidean düzlemindeki mesafeleri hesaplamak için, konum verilerini legacy coordinate pairs olarak
saklayın ve bir 2dindex kullanın.
• MongoDB, 2dsphere indeksi aracılığıyla legacy coordinate pairs küresel yüzey hesaplamalarını destekler.
• Verileri legacy coordinate pairs olarak belirtmek için bir array veya embedded document kullanabilirsiniz.
• Syntax:
Geospatial Queries
(Geospatial Indexes)
• 2dsphere
– 2dsphere indeksleri, dünya benzeri bir küre üzerinde geometrileri hesaplayan sorguları destekler.
– 2dsphere index’i oluşturmak için db.collection.createIndex() yöntemi kullanılır.
db.collection.createIndex({<location field>:"2dsphere"})
• 2d
– 2d index’ler, iki boyutlu bir düzlemde geometrileri hesaplayan sorguları destekler.
– 2 boyutlu bir index oluşturmak için db.collection.createIndex() metodu kullanılır.
db.collection.createIndex({<location field>:"2d"})
Geospatial Queries
(Geospatial Indexes and Sharded Collections)
• Bir koleksiyonu parçalarken(sharding) geospatial index’ini shard key olarak kullanamazsınız.
• Ancak, sharded bir koleksiyondaki geospatial index, shard key olarak farklı bir alan kullanılarak
oluşturulabilir.
• Geospatial index‘ler bir sorguyu kapsayamaz.
• Aşağıdaki geospatial işlemler, parçalanmış koleksiyonlarda desteklenir:
– $geoNear aggregation.
– $near ve $nearSphere sorgu operatörleri (MongoDB 4.0'dan itibaren)
– geoNear komutu (deprecated in MongoDB 4.0)
• Ayrıca, $geoWithin ve $geoIntersect kullanarak parçalanmış bir küme için geospatial verileri
sorgulayabilirsiniz.
Geospatial Queries
(Geospatial Query Operators)
Name Description
$geoIntersects GeoJSON geometrisi ile kesişen geometrileri seçer. 2dsphere endeksi $geoIntersects'i
destekler.
$geoWithin Sınırlayıcı bir GeoJSON geometrisi içindeki geometrileri seçer. 2dsphere ve 2d indeksleri
$geoWithin'i destekler.
$near Bir noktanın yakınındaki geospatial nesneleri döndürür. Geospatial bir index gerektirir.
2dsphere ve 2d index’leri $near'ı destekler.
$nearSphere Küre üzerindeki bir noktanın yakınındaki geospatial nesneleri döndürür. Geospatial bir
index gerektirir. 2dsphere ve 2d indeksleri $nearSphere'i destekler.
Geospatial Queries
(Geospatial Aggregation Stage)
Stage Description
$geoNear Geospatial noktanın yakınlığına göre sıralı döküman akışını döndürür. Geospatial
veriler için $match, $sort ve $limit fonksiyonlarını içerir. Çıktı dökümanlar ek bir
mesafe alanı içerir ve bir konum tanımlayıcı alanı içerebilir. $geoNear bir
geospatial index gerektirir.
Geospatial Queries
(Geospatial Command)
Command Description
geoNear (Deprecated in MongoDB 4.0) Belirli bir noktaya en yakın dökümanları döndüren geospatial
bir sorgu gerçekleştirir. Kullanımdan kaldırılan geoNear
komutu, geospatial bir dizin gerektirir.
Geospatial Queries
(Demo)
Find Restaurants with Geospatial Queries

More Related Content

PPTX
MongoDB - JSON'a Genel Bakış
PPTX
MongoDB - NoSQL Overview
PPTX
MLaaS - Presenting & Scaling Machine Learning Models as Microservices
PPTX
Go Programlama Dili - Seminer
PDF
Amazon EKS 그리고 Service Mesh (김세호 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018
PDF
분석가를 위한 Aws 기반의 digital 플랫폼 구축
PPTX
4. 대용량 아키텍쳐 설계 패턴
PPTX
[ Pycon Korea 2017 ] Infrastructure as Code를위한 Ansible 활용
MongoDB - JSON'a Genel Bakış
MongoDB - NoSQL Overview
MLaaS - Presenting & Scaling Machine Learning Models as Microservices
Go Programlama Dili - Seminer
Amazon EKS 그리고 Service Mesh (김세호 솔루션즈 아키텍트, AWS) :: Gaming on AWS 2018
분석가를 위한 Aws 기반의 digital 플랫폼 구축
4. 대용량 아키텍쳐 설계 패턴
[ Pycon Korea 2017 ] Infrastructure as Code를위한 Ansible 활용

What's hot (20)

PDF
Overview of the Eventuate Tram Customers and Orders application
PDF
Amazon Redshift로 데이터웨어하우스(DW) 구축하기
PPTX
Spring boot
PDF
ElasticSearch
ODP
Apache ppt
PDF
빅데이터를 위한 AWS 모범사례와 아키텍처 구축 패턴 :: 양승도 :: AWS Summit Seoul 2016
PDF
Elastic Search (엘라스틱서치) 입문
PDF
대용량 데이터베이스의 클라우드 네이티브 DB로 전환 시 확인해야 하는 체크 포인트-김지훈, AWS Database Specialist SA...
PPTX
Hadoop World 2011: Hadoop Troubleshooting 101 - Kate Ting - Cloudera
PDF
DMS와 SCT를 활용한 Oracle에서 Open Source DB로의 전환
PDF
Amazon OpenSearch - Use Cases, Security/Observability, Serverless and Enhance...
PPTX
Spring Framework
PDF
Introduction to MongoDB
PDF
[1A7]Ansible의이해와활용
PDF
AWS Blackbelt 2015シリーズ Elastic Load Balancing
PDF
Amazon Redshift의 이해와 활용 (김용우) - AWS DB Day
PDF
Intro to HBase
PPTX
Spark autotuning talk final
PDF
EKS를 통한 차량 공유 서비스 '타다' 서비스 구축기 - 김태호, VCNC :: AWS Summit Seoul 2019
PDF
인프라 자동 배포를 위한 AWS CloudFormation 고급 활용법 - AWS Summit Seoul 2017
Overview of the Eventuate Tram Customers and Orders application
Amazon Redshift로 데이터웨어하우스(DW) 구축하기
Spring boot
ElasticSearch
Apache ppt
빅데이터를 위한 AWS 모범사례와 아키텍처 구축 패턴 :: 양승도 :: AWS Summit Seoul 2016
Elastic Search (엘라스틱서치) 입문
대용량 데이터베이스의 클라우드 네이티브 DB로 전환 시 확인해야 하는 체크 포인트-김지훈, AWS Database Specialist SA...
Hadoop World 2011: Hadoop Troubleshooting 101 - Kate Ting - Cloudera
DMS와 SCT를 활용한 Oracle에서 Open Source DB로의 전환
Amazon OpenSearch - Use Cases, Security/Observability, Serverless and Enhance...
Spring Framework
Introduction to MongoDB
[1A7]Ansible의이해와활용
AWS Blackbelt 2015シリーズ Elastic Load Balancing
Amazon Redshift의 이해와 활용 (김용우) - AWS DB Day
Intro to HBase
Spark autotuning talk final
EKS를 통한 차량 공유 서비스 '타다' 서비스 구축기 - 김태호, VCNC :: AWS Summit Seoul 2019
인프라 자동 배포를 위한 AWS CloudFormation 고급 활용법 - AWS Summit Seoul 2017
Ad

Similar to MongoDB Overview (20)

PPTX
Mongodb Ödev- İnternet programcılığı- IP2-Vize 2
PDF
MongoDB ve C# Driver'ı
PDF
AnkaraJUG Haziran 2013 - No SQL / Big Data
PPTX
Mongodb-Adem
PPTX
NodeJS ve MongoDB
PDF
Nosql & MongoDB
PPTX
No SQL & MongoDB Nedir?
PDF
Mongo sunum
PPT
NoSQL Sunumu
PDF
Nosql ve mongoDB
PPTX
PDF
Spring Data MongoDB Webiner
PDF
NoSQL Nedir MongoDB ile .NET Kardeşliği
PDF
Nosql veritabanlari
PPTX
Nosql wars &amp; machine learning
PDF
veri tabanları . sql vs nosql
PPTX
Big Data Sunum
PPT
Kod günleri veritabnı
PPT
Kod günleri veritabnı
PDF
Pig ve Hive ile Hadoop üzerinde Veri Analizi
Mongodb Ödev- İnternet programcılığı- IP2-Vize 2
MongoDB ve C# Driver'ı
AnkaraJUG Haziran 2013 - No SQL / Big Data
Mongodb-Adem
NodeJS ve MongoDB
Nosql & MongoDB
No SQL & MongoDB Nedir?
Mongo sunum
NoSQL Sunumu
Nosql ve mongoDB
Spring Data MongoDB Webiner
NoSQL Nedir MongoDB ile .NET Kardeşliği
Nosql veritabanlari
Nosql wars &amp; machine learning
veri tabanları . sql vs nosql
Big Data Sunum
Kod günleri veritabnı
Kod günleri veritabnı
Pig ve Hive ile Hadoop üzerinde Veri Analizi
Ad

More from Cihan Özhan (20)

PPTX
AI and Machine Learning - Today’s Implementation Realities
PPTX
Mobil Uygulama Güvenliği (Mobile Security)
PPTX
Blockchain : Decentralized Application Development (Turkish)
PDF
Go Book - Fonksiyonlar, Metotlar, Arayüzler ve Yapılar
PDF
Golang Book - Go Programlama Dili Temelleri
PDF
Golang Book - Genel Bakış
PDF
Golang Book - Giriş
PDF
Yapay Zeka Güvenliği : Machine Learning & Deep Learning & Computer Vision Sec...
PDF
Endüstriyel Yapay Zeka ve Otonom Sistemler
PDF
AI Security : Machine Learning, Deep Learning and Computer Vision Security
PPTX
Yapay Zeka Güvenliği : Machine Learning & Deep Learning & Computer Vision Sec...
PPTX
Python Programlama Dili
PDF
İleri Seviye T-SQL Programlama - Chapter 21
PDF
İleri Seviye T-SQL Programlama - Chapter 20
PDF
İleri Seviye T-SQL Programlama - Chapter 19
PDF
İleri Seviye T-SQL Programlama - Chapter 18
PDF
İleri Seviye T-SQL Programlama - Chapter 17
PDF
İleri Seviye T-SQL Programlama - Chapter 16
PDF
İleri Seviye T-SQL Programlama - Chapter 15
PDF
İleri Seviye T-SQL Programlama - Chapter 14
AI and Machine Learning - Today’s Implementation Realities
Mobil Uygulama Güvenliği (Mobile Security)
Blockchain : Decentralized Application Development (Turkish)
Go Book - Fonksiyonlar, Metotlar, Arayüzler ve Yapılar
Golang Book - Go Programlama Dili Temelleri
Golang Book - Genel Bakış
Golang Book - Giriş
Yapay Zeka Güvenliği : Machine Learning & Deep Learning & Computer Vision Sec...
Endüstriyel Yapay Zeka ve Otonom Sistemler
AI Security : Machine Learning, Deep Learning and Computer Vision Security
Yapay Zeka Güvenliği : Machine Learning & Deep Learning & Computer Vision Sec...
Python Programlama Dili
İleri Seviye T-SQL Programlama - Chapter 21
İleri Seviye T-SQL Programlama - Chapter 20
İleri Seviye T-SQL Programlama - Chapter 19
İleri Seviye T-SQL Programlama - Chapter 18
İleri Seviye T-SQL Programlama - Chapter 17
İleri Seviye T-SQL Programlama - Chapter 16
İleri Seviye T-SQL Programlama - Chapter 15
İleri Seviye T-SQL Programlama - Chapter 14

MongoDB Overview

  • 2. MongoDB MongoDB NoSQL Database Cihan Özhan | DeepLab.co | Founder, AI Engineer, Mentor
  • 3. MongoDB Nedir? • MongoDB bir döküman veritabanıdır. • NoSQL veritabanları ile girişte görüldüğü gibi, satırların(veya MongoDB'de dökümanlar) önceden tanımlanmış şemaya sahip olmasına gerek yoktur. • MongoDB'de bulunan veri modeli, hiyerarşik ilişkileri temsil etmenize, dizileri depolamanıza ve diğer daha karmaşık yapıları daha kolay bir şekilde göstermenize olanak tanır. • MongoDB ortamları oldukça ölçeklenebilir.
  • 4. MongoDB Geçmişi • MongoDB, 2007 yılında Eliot Horowitz ve Dwight Merriman tarafından geliştirildi. • Dwight Merriman'a göre bu veritabanı adı, büyük miktarda veriyi işleme fikrini desteklemek için humongous kelimesinden türetildi. • 2009 yılında MongoDB açık kaynaklı bir proje olarak yapılırken, şirket ticari destek hizmetleri sunmuştur. – Pek çok şirket, şaşırtıcı birçok özelliği için MongoDB'yi kullanmaya başladı. • New York Times gazetesi, fotoğrafları göndermek için web tabanlı bir uygulama oluşturmak için MongoDB'yi kullandı. • MongoDB'nin ilk hazır üretimi, Mart 2010'da piyasaya sürülen 1.4 sürümünden düşünüldü. • 2013 yılında şirket resmi olarak MongoDB Inc.'e seçildi. • Bundan sonra MongoDB 2.4.9, 10 Ocak 2014'te yayınlandı. • MongoDB 4.0.3, mevcut en son ve kararlı sürümdür.
  • 5. MongoDB'de Genel Terimler • _id – The _id field represents a unique value in the MongoDB document. The _id fields is like the document's primary key. • collection – Bu, MongoDB dökümanlarından oluşan bir gruptur. • cursor – Bu, bir sorgunun sonuç kümesine bir göstericidir. • database – Bu, koleksiyonlar için bir kaptır. Her veritabanı, dosya sisteminde kendi dosya kümesini alır. • document – MongoDB koleksiyonundaki bir kayda temelde belge denir. • field – Bir belgedeki ad-değer çiftidir.
  • 7. MongoDB Kullanan Kuruluşlar • MongoDB'yi iş uygulamalarının çoğu için veritabanı olarak kullanan bazı büyük ve önemli kuruluşlar aşağıdadır: – LinkedIn – eBay – SAP – Adobe – McAfee – FourSquare – MetLife
  • 8. MongoDB'nin Özellikleri • Ad-Hoc Sorgu Desteği • Aggregation • Yüksek Performans • Yatay Ölçeklenebilirlik (Horizontal Scalability) • Geniş Media Desteği • Yük Dengeleme (Load Balancing) • Replication • Index • GridFS • MapReduce • Auto-Sharding
  • 9. MongoDB'nin Avantajları • Open Source • Parçalama (Sharding) • Daha Hızlı İşlem(Process) • Schemaless • Document-Based • No SQL Injection
  • 10. MongoDB vs. MySQL MongoDB MySQL Birçok alternatif veri modeli İlişkisel veritabanı yönetim sistemi Schemaless Schema Atomikliği destekler Transactional Relational Data Store JSON query SQL Server-Side Scripting Stored Procedures Implemented Yüksek Ölçekli Ölçeklenebilir Değil Daha Hızlı Daha Yavaş
  • 11. MongoDB vs. Cassandra Cassandra MongoDB Cassandra, yüksek performanslı dağıtılmış veritabanı sistemidir. MongoDB, platformlar arası döküman odaklı veritabanı sistemidir. Cassandra Java ile yazılmıştır. MongoDB, C++ ile yazılmıştır Cassandra, verileri SQL biçimi gibi tablo biçiminde depolar. MongoDB, verileri JSON biçiminde depolar. Cassandra Apache lisansına sahiptir. MongoDB, AGPL lisansına ve Apache driver’larına sahiptir. Cassandra temelde büyük miktarda veriyi işlemek için tasarlanmıştır. MongoDB, JSON benzeri dökümanlarla başa çıkmak ve uygulamalara daha kolay ve daha hızlı erişmek için tasarlanmıştır. Cassandra, tek bir hata noktası olmadan yüksek kullanılabilirlik sağlar. MongoDB'nin başarısızlık durumunda yönetilmesi kolaydır.
  • 12. MongoDB CouchDB Document-Based modeli takip ederse ve veriler JSON formatında sunulur. Document-oriented modeli takip ederse ve veriler JSON formatında sunulur. Binary protokol ve TCP/IP üzerinden özel protokol kullanır. HTTP/REST tabanlı arayüz kullanır. Çok sezgiseldir ve çok iyi tasarlanmıştır. Veritabanı koleksiyonları ve koleksiyon dökümanları içerir. CouchDB'de veritabanı dökümanları içerir. MongoDB, collection + object-based sorgu dili oluşturarak Map/Reduce(JavaScript)'i izler. Map/Reduce sorgu yöntemini izler. (JavaScript + Diğerleri) master-slave replication’ı destekler. Custom conflict resolution function’lar ile master-master çoğaltmayı destekler. Yerinde güncelleme MVVC’yi takip eder.(Multi Version Concurrency Control) MongoDB tutarlılığı destekler. Availability’I destekler. MongoDB son derece tutarlıdır. CouchDB tutarlıdır. C++ ile geliştirildi. Erlang dilinde yazıldı. MongoDB vs. CouchDB
  • 13. MongoDB Redis Document-store yapısını takip eden en popüler NoSQL veritabanlarından biridir. Veritabanı, önbellek ve mesaj aracısı olarak kullanılan bellek içi veri yapısı deposudur. Document-store modelini takip eder. Redis, key-value store modelini takip eder. MongoDB Inc. tarafından geliştirilmiştir. Salvatore Sanfilippo tarafından geliştirildi. Ücretsiz ve açık kaynaklıdır. Subscription-based ve açık kaynaklıdır. C++ ile geliştirildi. Redis, C dilinde yazılmış ve uygulanmıştır. Sunucu işletim sistemleri Linux, OS X, Solaris, Windows'dur. Sunucu işletim sistemleri BSD, Linux, OS X, Windows'dur. İkincil index içerir. İkincil index desteklemez. JSON kullan. Proprietary Protocol’ü takip eder. Proprietary Protocol’ü takip eder. Sunucu Tarafı komut dosyası JavaScript'tir Redis'teki Sunucu Tarafı komut dosyası Lua’dır. MapReduce var. MapReduce'a sahip değil MongoDB vs. Redis
  • 14. MongoDB Redis Nihai Tutarlılık Eventual Consistency ve Immediate Consistency Kullanıcılar ve roller için erişim hakları. Basit password-based erişim kontrolü Yeni nesil veritabanı olarak kabul ediliyor. Dünyanın en hızlı veritabanı olarak derecelendirilmiştir. MongoDB, günümüz uygulamalarının gerektirdiği esneklik, ölçek ve performansın yanı sıra geleneksel veritabanlarının en iyisini sağlar. Redis, bir bellek içi veritabanı platformudur; strings, hashes, sets, lists, sorted sets, bitmaps, hyperloglogs ve geospatial index gibi çok çeşitli veri yapıları için destek sağlar. 30 milyon indirme(her gün binlerce indirme ile artıyor). Fortune 100'ün üçte birinden fazlası dahil 3.000'den fazla müşteri. Redis Labs, dünya çapında 60000'den fazla müşteriden oluşur ve NoSQL, bellek içi ve operasyonel veritabanları hakkındaki en iyi analist raporlarında tutarlı bir şekilde lider olarak sıralanır. MongoDB vs. Redis
  • 15. MongoDB Neden Kullanılmalı? • Document-Oriented • Ad-Hoc Queries • Indexing • Replication • Load Balancing • Flexibility – MongoDB'deki veriler esnek bir şemaya sahiptir. Koleksiyonlar belge yapısını zorlamaz. – Bu esneklik, uygulamanıza ve performans gereksinimlerine uygun veri modelleme seçenekleri sunar. • Scalability – Verilerin boyutu arttıkça, tek bir makine verileri depolamak veya kabul edilebilir bir okuma ve yazma verimi sağlamak için yeterli olmayabilir. – Sharding, sorunu yatay ölçeklemeyle çözer. Sharding, veri büyümesinin taleplerini karşılamak için MongoDB'nin izlediği yaklaşımdır. • Performance – MongoDB, MySQL'den 2 ila 10 kat ve CouchDB'den 50 kat daha hızlıdır.
  • 16. MongoDB Ne Zaman Kullanılmalı? • Veri Ekleme Tutarlılığı • Data Corruption Recovery (Veri Kurtarma) • Load Balancing • JOIN’lerden Kaçınmak İçin • Şema Değişiklikleri İçin En Uygun Yol • İlişkisel Veri Değil
  • 18. MongoDB Shell (MongoDB Shell Quick Reference)
  • 19. Command Line Options Option Description --help Komut satırı seçeneklerini göster --nodb Veritabanına bağlanmadan akıllı mongo shell --shell JavaScript dosyasını çalıştırdıktan sonra mongo kabuğunda devam etmek için bir JavaScript dosyasıyla (yani <file.js>) birlikte kullanılır.
  • 20. Command Helpers Help Methods & Commands Description help Show help db.help() Show help for database methods. db.<collection>.help() Show help on collection methods. show dbs Print a list of all databases on the server. use <db> Switch current database to <db> show collections Print a list of all collections for current database. show users Print a list of users for current database. show roles Print a list of all roles, ot user-defined and built-in, for the current database. show profile Print the five most recent operations that took 1 millisecond or more. show databases Print a list of all available databases. load() Execute a JavaScript file.
  • 21. Temel Shell JavaScript Operasyonları JavaScript DB Operations Description db.auth() If running in secure mode, authenticate the user. coll = db.<collection> Set a specific collection in the current database to a variable coll. db.collection.find() Find all documents in the collection and returns a cursor. db.collection.insertOne() Insert a new document into the collection. db.collection.insertMany() Insert multiple new documents into the collection. db.collection.updateOne() Update a single existing document in the collection. db.collection.updateMany() Update multiple existing documents in the collection. db.collection.save() Insert either a new document or update an existing document in the collection. db.collection.deleteOne() Delete a single document from the collection. db.collection.deleteMany() Delete documents from the collection. db.collection.drop() Drops or removes completely the collection. db.collection.createIndex() Create a new index on the collection if the index does not exist. db.getSiblingDB() Return a reference to another database using this same connection without explicitly switching the current database. This allows for cross database queries.
  • 22. Keyboard Shortcuts Keystroke Function Up + Arrow / CTRL - P Previous-Histroy Down-Arrow / CTRL - N Next-History Home / CTRL - A Beginning-of-Line End / CTRL - E End-of-Line Tab Automcomplete Left + Arrow / CTRL + B Backward-Character Right + Arrow / CTRL + F Forward-Character CTRL + Left + Arrow / Meta + Left + Arrow / Meta + B Backward-Word CTRL + Right + Arrow / Meta + Right + Arrow / Meta + F Forward-Word CTRL + C Exit-Shell CTRL + D Delete-Char (or Exit Shell) CTRL + G Abort
  • 23. Keyboard Shortcuts Keystroke Function CTRL + J / CTRL + M Accept-Line CTRL + K Kill-Line CTRL + L Clear-Screen CTRL + R Reverse-Search-History CTRL + S Forward-Search-History CTRL + T Transpose-Chars CTRL + H (i.e Backspace) Backward-Delete-Char CTRL + I (i.e Tab) Complete Meta + C Capitalize-Word Meta + L Downcase-Word Meta + U Upcase-Word Meta + < Beginning-of-History Meta + > End-of-History
  • 28. DataType Description Double Used to stored floating point values. String Commonly used datatype ad it is UTF-8 valid. Object Used for storing embedded objects Array Used for storing embedded objects Binary Data Used to store binary data Undefined Used to store undefined value Object Id Used to store document's ID Boolean Used to store Boolean value Date Used to store current date time in UNIX format. Null Used to store null value Regular Expression Used to store regex JavaScript Used to store JavaScript data without scope Symbol Basically used to store string, but reserved for languages that use specific symbol JavaScript with Scope Used to store JavaScript data with scope Integer Used to store numerical value Timestamp Used to track when a docuyment is modified Min / Max Key Used to compare value against lowest and highest BSON elements.
  • 29. Database • Veritabanı, koleksiyonlar için fiziksel bir konteynırdır. • MongoDB'de CREATE DATABASE komutu yoktur. • MongoDB'de veritabanını manuel olarak oluşturmanız gerekmez. • Koleksiyona döküman kaydettiğinizde otomatik olarak veritabanı oluşturulacaktır. • use Komutu: – MongoDB'de veritabanı oluşturmak için use komutu kullanılır. – Komut, mevcut değilse yeni bir veritabanı oluşturur, aksi takdirde mevcut veritabanını döndürür. – Syntax • use DATABASE_NAME • dropDatabase() Metodu – dropDatabase() command is used to drop an existing database in MongoDB. – Syntax • db.dropDatabase()
  • 30. Database > use mydb > db > show dbs > db.movie.insert({"name":"mongodb"}) > show dbs > db.dropDatabase() > show dbs
  • 31. Collection • Koleksiyon, MongoDB dökümanlarından oluşan bir gruptur. • RDBMS’deki tablonun eşdeğeridir. • Koleksiyonlar açıkça veya otomatik olarak oluşturulabilir. • MongoDB, birkaç döküman eklediğinizde otomatik olarak koleksiyon oluşturur. • createCollection() method is used to create collections explicitly in MongoDB: – db.createCollection(name, options) Field Type Description Capped Boolean True olarak ayarlanmışsa, sınırlı bir koleksiyonu etkinleştirir. AutoIndexID Boolean True olarak ayarlanmışsa, ID alanında otomatik olarak indeks oluşturur. Varsayılan değeri false. Size Number Sınırlı bir koleksiyon için bayt cinsinden maksimum boyutu belirtir. Sınırlanmış doğruysa, bu alanı da belirtmeniz gerekir. Max Number Sınırlı koleksiyonda izin verilen maksimum belge sayısını belirtir.
  • 32. Documents • Doküman, bir dizi key/value’dur. • Dökümanlar dinamik şemaya sahiptir. • MongoDB verileri BSON dökümanlar olarak saklar. Döküman Yapısı Örnek
  • 33. Collections (Alan Adlarına İlişkin Kısıtlamalar) • _id alan adı, Primary Key olarak kullanılmak üzere ayrılmıştır; değeri koleksiyonda benzersiz olmalıdır, değişmezdir ve bir dizi dışında herhangi bir türde olabilir. • Alan adları boş karakter içeremez. • Top-Level alan adları dolar işareti($) karakteriyle başlayamaz. • Aksi takdirde sunucu, noktalar(yani) ve dolar işaretleri(yani $) içeren alan adlarının depolanmasına izin verir.
  • 34. Collections (Alan Adlarına İlişkin Kısıtlamalar) • Document Size Limit – Maksimum BSON dökümanı boyutu 16 megabayttır. • Document Field Order – MongoDB, aşağıdaki durumlar dışında, yazma işlemlerinin ardından belge alanlarının sırasını korur: • _id alanı her zaman belgedeki ilk alandır. • Alan adlarının yeniden adlandırılmasını içeren güncellemeler, dökümandaki alanların yeniden sıralanmasına neden olabilir. • The _id Field – _id alanı aşağıdaki davranışa ve kısıtlamalara sahiptir: • Varsayılan olarak MongoDB, bir koleksiyonun oluşturulması sırasında _id alanında benzersiz bir dizin oluşturur. • _id alanı her zaman belgelerdeki ilk alandır. • _id alanı, bir dizi dışında herhangi bir BSON veri türünün değerlerini içerebilir.
  • 35. Collections (Karşılaştırma veya Sıralama Düzeni) Farklı BSON Tiplerinin Değerlerinin Karşılaştırılması Order Data Types 1 MinKey (Internal Type) 2 Null 3 Numbers (ints, longs, doubles) 4 Symbol, String 5 Object 6 Array 7 BinData 8 ObjectId 9 Boolean 10 Date, Timestamp 11 Regular Expression 12 MaxKey (Internal Type)
  • 36. Collections (Insert Documents) • Tekil Bir Döküman Eklemek – insertOne() yöntemi, bir koleksiyona tek bir belge eklemek için kullanılır. – Syntax • db.COLLECTION_NAME.insertOne(document) – Eklenen belgeleri almak için koleksiyonu sorgulayın: • db.COLLECTION_NAME({}) • Insert için Ek Yöntemler: – db.collection.update() – db.collection.updateOne() – db.collection.updateMany() – db.collection.findAndModify() – db.collection.findOneAndUpdate() – db.collection.findOneAndReplace() – db.collection.save() – db.collection.bulkWrite()
  • 37. Collections (Query Documents) • The find() Method – MongoDB koleksiyonundan veri sorgulamak için MongoDB'nin find() yöntemi kullanılır. – Syntax • db.COLLECTION_NAME.find() • The pretty() Method – Sonuçları biçimlendirilmiş bir şekilde görüntülemek için pretty() yöntemi kullanılır. – Syntax • db.COLLECTION_NAME.find().pretty() Operation Syntax Equality {<key> : <value>} Less Than {<key> : {$lt : <value>}} Less Than Equals {<key> : {$lte : <value>}} Greater Than {<key> : {$gt : <value>}} Greater Than Equals {<key> : {$gte : <value>}} Not Equals {<key> : {$ne : <value>}}
  • 38. Collections (AND & OR) • AND – Find() yönteminde, birden çok anahtarı "" ile ayırarak geçirirseniz, MongoDB bunu AND koşulu olarak kabul eder. Syntax • OR – OR koşuluna göre belgeleri sorgulamak için $ veya anahtar sözcüğünü kullanmanız gerekir. Syntax
  • 39. Bulk Operasyonları • MongoDB, istemcilere yazma işlemlerini toplu olarak gerçekleştirme yeteneği sağlar. • Toplu yazma işlemleri tek bir koleksiyonu etkiler. • db.collection.bulkWrite() yöntemi, toplu ekleme, güncelleme ve kaldırma işlemleri gerçekleştirme yeteneği sağlar. • MongoDB ayrıca db.collection.insertMany() aracılığıyla toplu eklemeyi destekler • Varsayılan olarak, bulkWrite() ordered işlemleri gerçekleştirir. • Unordered yazma işlemlerini belirtmek için seçenekler dökümanında ordered:false değerini ayarlayın.
  • 40. Bulk Operasyonları (Ordered ve Unordered İşlemler) • Toplu yazma işlemleri sıralı veya sırasız olabilir. • Sıralı bir işlem listesi ile MongoDB işlemleri seri olarak yürütürken, Sırasız işlem listesi ile MongoDB, işlemleri paralel olarak yürütebilir. • Sharded(parçalanmış) bir koleksiyon üzerinde sıralı bir işlem listesi yürütmek, genellikle sırasız bir liste yürütmekten daha yavaş olacaktır. • Varsayılan olarak, bulkWrite() ordered işlemleri gerçekleştirir. Unordered yazma işlemlerini belirtmek için seçenekler belgesinde sıralı: yanlış değerini ayarlayın. • bulkWrite() Metodları: – insertOne – updateOne – updateMany – replaceOne – deleteOne – deleteMany Her yazma işlemi, bir dizideki belge olarak bulkWrite() öğesine iletilir.
  • 41. Retryable Writes • Yeniden denenebilir yazma işlemleri, MongoDB sürücülerinin, ağ hatalarıyla karşılaşırlarsa veya replica set’lerinde ya da sharded cluster sağlıklı bir primary key bulamazlarsa, belirli yazma işlemlerini tek seferde otomatik olarak yeniden denemelerine olanak tanır. • Prerequisites: – Desteklenen Dağıtım Topolojileri – Desteklenen Depolama Motoru – MongoDB Drivers – MongoDB VersionMongoDB Version • Retryable Writes & Multi-Document Transactions: – MongoDB sürücüleri, transaction commit ve abort operation dışında varsayılan olarak yeniden denenebilir yazmaları etkinleştirmez. – MongoDB Drivers: • MongoDB driver’ında retryable writes’ı etkinleştirmek için connection string retryWrites seçeneğini ekleyin: – mongodb://localhost/?retryWrites=true • Mongo Shell – Mongo kabuğunda yeniden denenebilir yazmaları etkinleştirmek için --retryWrites komut satırı seçeneğini kullanın: » mongo --retryWrites
  • 42. Retryable Writes (Retryable Write Operasyonları) Methods Descriptions db.collection.findAndModify() findAndModify işlemleri. Tüm findAndModify işlemleri tek döküman işlemleridir. db.collection.findOneAndDelete() db.collection.findOneAdReplace() db.collection.findOneAndUpdate() insertOne() Yalnızca single-document yazma işlemlerinden oluşan toplu yazma işlemleri. updateOne() replaceOne() deleteOne() Bulk.find.removeOne() Yalnızca single-document yazma işlemlerinden oluşan toplu yazma işlemleri. Bulk.find.replaceOne() Bulk.find.replaceOne()
  • 43. Text Search • MongoDB, dize içeriğinde metin araması gerçekleştiren sorgu işlemlerini destekler. • MongoDB, dize içeriği üzerinde metin arama sorgularını desteklemek için metin index’leri sağlar. • Metin index’leri, değeri bir string veya dizi olan herhangi bir alanı içerebilir. • Metin arama sorguları gerçekleştirmek için koleksiyonunuzda bir text index olması gerekir. • Bir koleksiyonun yalnızca bir text search index’i olabilir, ancak bu index birden çok alanı kapsayabilir. • Text Search in Query Framework: – $text sorgu operatörü, bir metin dizini içeren bir koleksiyonda metin aramaları gerçekleştirmek için kullanılır. • Text Search in the Aggregation Pipeline: – In the aggregation pipeline, text search is available via the use of the $text query operator in the $match stage. • Kısıtlamalar – $text içeren $match aşaması, pipeline hattındaki ilk aşama olmalıdır.
  • 44. Geospatial Queries (GeoJSON Objects) • Dünya benzeri bir küre üzerinde geometriyi hesaplamak için, konum verilerinizi GeoJSON nesneleri olarak saklayın. • GeoJSON verilerini belirtmek için aşağıdakileri içeren bir embedded-document kullanın: – GeoJSON nesne türünü belirten type adlı bir alan ve… – nesnenin koordinatlarını belirten coordinates adlı bir alan. • Enlem ve boylam koordinatlarını belirtiyorsanız, önce boylamı, ardından enlemi listeleyin: – Geçerli boylam değerleri, her ikisi de dahil olmak üzere -180 ile 180 arasındadır. – Geçerli enlem değerleri -90 ile 90 arasındadır (her ikisi dahil). • Syntax – <field> : { type: <GeoJSON type>, coordinates: <coordinates>}
  • 45. Geospatial Queries (Legacy Coordinate Pairs) • Bir Euclidean düzlemindeki mesafeleri hesaplamak için, konum verilerini legacy coordinate pairs olarak saklayın ve bir 2dindex kullanın. • MongoDB, 2dsphere indeksi aracılığıyla legacy coordinate pairs küresel yüzey hesaplamalarını destekler. • Verileri legacy coordinate pairs olarak belirtmek için bir array veya embedded document kullanabilirsiniz. • Syntax:
  • 46. Geospatial Queries (Geospatial Indexes) • 2dsphere – 2dsphere indeksleri, dünya benzeri bir küre üzerinde geometrileri hesaplayan sorguları destekler. – 2dsphere index’i oluşturmak için db.collection.createIndex() yöntemi kullanılır. db.collection.createIndex({<location field>:"2dsphere"}) • 2d – 2d index’ler, iki boyutlu bir düzlemde geometrileri hesaplayan sorguları destekler. – 2 boyutlu bir index oluşturmak için db.collection.createIndex() metodu kullanılır. db.collection.createIndex({<location field>:"2d"})
  • 47. Geospatial Queries (Geospatial Indexes and Sharded Collections) • Bir koleksiyonu parçalarken(sharding) geospatial index’ini shard key olarak kullanamazsınız. • Ancak, sharded bir koleksiyondaki geospatial index, shard key olarak farklı bir alan kullanılarak oluşturulabilir. • Geospatial index‘ler bir sorguyu kapsayamaz. • Aşağıdaki geospatial işlemler, parçalanmış koleksiyonlarda desteklenir: – $geoNear aggregation. – $near ve $nearSphere sorgu operatörleri (MongoDB 4.0'dan itibaren) – geoNear komutu (deprecated in MongoDB 4.0) • Ayrıca, $geoWithin ve $geoIntersect kullanarak parçalanmış bir küme için geospatial verileri sorgulayabilirsiniz.
  • 48. Geospatial Queries (Geospatial Query Operators) Name Description $geoIntersects GeoJSON geometrisi ile kesişen geometrileri seçer. 2dsphere endeksi $geoIntersects'i destekler. $geoWithin Sınırlayıcı bir GeoJSON geometrisi içindeki geometrileri seçer. 2dsphere ve 2d indeksleri $geoWithin'i destekler. $near Bir noktanın yakınındaki geospatial nesneleri döndürür. Geospatial bir index gerektirir. 2dsphere ve 2d index’leri $near'ı destekler. $nearSphere Küre üzerindeki bir noktanın yakınındaki geospatial nesneleri döndürür. Geospatial bir index gerektirir. 2dsphere ve 2d indeksleri $nearSphere'i destekler.
  • 49. Geospatial Queries (Geospatial Aggregation Stage) Stage Description $geoNear Geospatial noktanın yakınlığına göre sıralı döküman akışını döndürür. Geospatial veriler için $match, $sort ve $limit fonksiyonlarını içerir. Çıktı dökümanlar ek bir mesafe alanı içerir ve bir konum tanımlayıcı alanı içerebilir. $geoNear bir geospatial index gerektirir.
  • 50. Geospatial Queries (Geospatial Command) Command Description geoNear (Deprecated in MongoDB 4.0) Belirli bir noktaya en yakın dökümanları döndüren geospatial bir sorgu gerçekleştirir. Kullanımdan kaldırılan geoNear komutu, geospatial bir dizin gerektirir.