MongoDB’de Detaylı Sorgulama/Querying (MongoDB Öğreniyoruz 4)
Merhaba arkadaşlar
Yazı serimizin bu yazısında crud işlemlerini gördüğümüz makalenin devamı niteliğinde olan ve sorgulama detaylarını içeren konuları göreceğiz.
Makale serisinin diğer yazıları için alttaki linkleri kullanabilirsiniz.
- Distributed Sistemlerde Consistency Kavramı ve Document DB Karşılaştırmaları (MongoDB Öğreniyoruz 1)
- MongoDB Kurulum ve CRUD İşlemleri (MongoDB Öğreniyoruz 2)
- MongoDB’de Embedded, Referenced Document ve Relation Kavramları (MongoDB Öğreniyoruz 3)
- MongoDB’de Detaylı Sorgulama/Querying (MongoDB Öğreniyoruz 4)
- MongoDB’de Index Kullanımı ve Sorgu Optimizasyonu (MongoDB Öğreniyoruz 5)
- MongoDB’de Aggregation Pipeline Stage Kullanımı (MongoDB Öğreniyoruz 6)
- MongoDB’de Aggregation Pipeline Operation Kullanımı ve Sorgu Optimizasyonu (MongoDB Öğreniyoruz 7)
- MongoDB’ de Transaction Yönetimi (MongoDB Öğreniyoruz 8)
- MongoDB’ de Role Tabanlı Yetkilendirme (MongoDB Öğreniyoruz 9)
- MongoDB’de Büyük Obje ve Dosyaların GridFS ile Yönetimi(MongoDB Öğreniyoruz 10)
Array Sorgulama
Şu sayfayı takip ediyor olacağız. Sayfadaki shell’i de kullanarak da uygulamaları yapabilirsiniz.
Öncelikle kayıtlarımızı girelim. Göreceğiniz üzere tags alanı array tipinde.
db.inventory.insertMany([
{ item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ] },
{ item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ] },
{ item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] },
{ item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ] },
{ item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ] }
]);
- Eşitlik Sorgulamak
Tag alanın eşit olması gereken array ifadesi olduğu gibi yazarak arama yapabiliriz.
db.inventory.find( { tags: ["red", "blank"] } )
// [
// {
// _id: ObjectId("62cff0df6d23d2ccaad2934d"),
// item: 'notebook',
// qty: 50,
// tags: [ 'red', 'blank' ],
// dim_cm: [ 14, 21 ]
// }
// ]
Eğer red ve ardından blank değerini aynı sırada değilde farklı sırada bile olsa almak istersek $all operatörünü kullanırız.
$all operatörünün detayları için şu sayfayı ziyaret ediniz.
db.inventory.find( { tags: { $all: ["red", "blank"] } } )// [
// {
// _id: ObjectId("62cff0df6d23d2ccaad2934c"),
// item: 'journal',
// qty: 25,
// tags: [ 'blank', 'red' ],
// dim_cm: [ 14, 21 ]
// },
// {
// _id: ObjectId("62cff0df6d23d2ccaad2934d"),
// item: 'notebook',
// qty: 50,
// tags: [ 'red', 'blank' ],
// dim_cm: [ 14, 21 ]
// },
// {
// _id: ObjectId("62cff0df6d23d2ccaad2934e"),
// item: 'paper',
// qty: 100,
// tags: [ 'red', 'blank', 'plain' ],
// dim_cm: [ 14, 21 ]
// },
// {
// _id: ObjectId("62cff0df6d23d2ccaad2934f"),
// item: 'planner',
// qty: 75,
// tags: [ 'blank', 'red' ],
// dim_cm: [ 22.85, 30 ]
// }
// ]
- Array İçindeki Değerleri Sorgulama
db.inventory.find( { tags: "red" } )
// [
// {
// _id: ObjectId("62cff0df6d23d2ccaad2934c"),
// item: 'journal',
// qty: 25,
// tags: [ 'blank', 'red' ],
// dim_cm: [ 14, 21 ]
// },
// {
// _id: ObjectId("62cff0df6d23d2ccaad2934d"),
// item: 'notebook',
// qty: 50,
// tags: [ 'red', 'blank' ],
// dim_cm: [ 14, 21 ]
// },
// {
// _id: ObjectId("62cff0df6d23d2ccaad2934e"),
// item: 'paper',
// qty: 100,
// tags: [ 'red', 'blank', 'plain' ],
// dim_cm: [ 14, 21 ]
// },
// {
// _id: ObjectId("62cff0df6d23d2ccaad2934f"),
// item: 'planner',
// qty: 75,
// tags: [ 'blank', 'red' ],
// dim_cm: [ 22.85, 30 ]
// }
// ]
- Array İçinde Birden Fazla Koşul Kullanmak
Bunun için $selemMatch operatörünü kullanıyoruz. $elemMatch içinde $gt ve $lt operatörleri aynı anda kullanılmış.
db.inventory.find( { dim_cm: { $elemMatch: { $gt: 22, $lt: 30 } } } )// [
// {
// _id: ObjectId("62cff0df6d23d2ccaad2934f"),
// item: 'planner',
// qty: 75,
// tags: [ 'blank', 'red' ],
// dim_cm: [ 22.85, 30 ]
// }
// ]
- Array’in Boyutunu Sorgulamak
db.inventory.find( { "tags": { $size: 3 } } )// [
// {
// _id: ObjectId("62cff0df6d23d2ccaad2934e"),
// item: 'paper',
// qty: 100,
// tags: [ 'red', 'blank', 'plain' ],
// dim_cm: [ 14, 21 ]
// }
// ]
Null, Missing Value ve Type Sorgulama
Konuyu şu sayfadan takip edebilirsiniz.
Önce kayıt girelim.
db.inventory.insertMany([
{ _id: 1, item: null },
{ _id: 2 }
])
- Null Sorgulama
Dikkat edilirse null sorgusunda hem null hem de missing value geliyor.
db.inventory.find( { item: null } )// [ { _id: 1, item: null }, { _id: 2 } ]
- Type Check
10 rakamı null tipinin sayısal değeri. Bütün BSON tiplerini görmek için şu sayfayı ziyaret ediniz. Sadece tek değer döndü çünkü biz burada değer kontrolü değil tip sorgulaması yaptık.
db.inventory.find( { item : { $type: 10 } } )// [ { _id: 1, item: null } ]
- Alanın Varolup Olmadığını Sorgulanması
db.inventory.find( { item : { $exists: false } } )// [ { _id: 2 } ]
And, Or kullanımı ve İçiçe Sorgular
Konuyu şu linkten takip edebilirsiniz.
Öncelikle biraz kayıt girelim.
db.inventory2.insertMany([
{ item: "journal", qty: 25, tags: ["blank", "red"], dim_cm: [ 14, 21 ] },
{ item: "notebook", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ] },
{ item: "notebook2", qty: 50, tags: ["red", "blank"], dim_cm: [ 14, 21 ], "price": 10.5 },
{ item: "paper", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] , "price": 10.5 },
{ item: "paper2", qty: 100, tags: ["red", "blank", "plain"], dim_cm: [ 14, 21 ] , "price": 10.5 },
{ item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ 22.85, 30 ], "price": 11.0 },
{ item: "postcard", qty: 45, tags: ["blue"], dim_cm: [ 10, 15.25 ], "price": 12.5 }
]);
Syntax’i şu şekilde
{ $and: [ { <expression1> }, { <expression2> } , ... , { <expressionN> } ] }
And kullanımı
db.inventory2.find(
{
$and:
[
{qty: { $in: [100,75, 25] } },
{price: { $exists: true } }
]
}
)// price ı olup qty alanın değeri 100, 75, 25 den biri olanlar// [
// {
// _id: ObjectId("62d1a4453d35a3afc00610b0"),
// item: 'paper',
// qty: 100,
// tags: [ 'red', 'blank', 'plain' ],
// dim_cm: [ 14, 21 ],
// price: 10.5
// },
// {
// _id: ObjectId("62d1a4453d35a3afc00610b1"),
// item: 'paper2',
// qty: 100,
// tags: [ 'red', 'blank', 'plain' ],
// dim_cm: [ 14, 21 ],
// price: 10.5
// },
// {
// _id: ObjectId("62d1a4453d35a3afc00610b2"),
// item: 'planner',
// qty: 75,
// tags: [ 'blank', 'red' ],
// dim_cm: [ 22.85, 30 ],
// price: 11
// }
// ]
Or Kullanımı
db.inventory2.find(
{
$or:
[
{qty: { $in: [75,25] } },
{item: "postcard" }
]
}
)// qty alanın değeri 75, 25 den biri olanlar veya item alanı postcard olanlar// [
// {
// _id: ObjectId("62d1a4453d35a3afc00610ad"),
// item: 'journal',
// qty: 25,
// tags: [ 'blank', 'red' ],
// dim_cm: [ 14, 21 ]
// },
// {
// _id: ObjectId("62d1a4453d35a3afc00610b2"),
// item: 'planner',
// qty: 75,
// tags: [ 'blank', 'red' ],
// dim_cm: [ 22.85, 30 ],
// price: 11
// },
// {
// _id: ObjectId("62d1a4453d35a3afc00610b3"),
// item: 'postcard',
// qty: 45,
// tags: [ 'blue' ],
// dim_cm: [ 10, 15.25 ],
// price: 12.5
// }
// ]
Şimdi içiçe yazmayı deneyelim.
db.inventory2.find(
{
$and:[
{ qty: { $in: [75, 25] } },
{ $or:
[
{ item: "postcard" },
{ item: "journal" }
]
}
]
}
)// qty alanı 75 veya 25 den biri olan ve item değeri postcard veya journal olan// [
// {
// _id: ObjectId("62d1a4453d35a3afc00610ad"),
// item: 'journal',
// qty: 25,
// tags: [ 'blank', 'red' ],
// dim_cm: [ 14, 21 ]
// }
// ]
Sayfalama
Normalde eğer yaptığımız sorgunun sonunda aşağıdaki örnekte olduğu gibi array fonksiyonu eklemezsek sadece ilk yirmi doküman gelir. Shell üzerinde ilk yirmi kayıttan sonra it komutu ile sonraki yirmi kayıt görülebilir.
db.collection.find({}).array()
Uygulama yazarken veya shell ekranında da kullanabileceğimiz aşağıdaki tekniklerle istediğimiz kadar kaydı istediğimiz noktadan itibaren alabiliriz.
// Sayfa 1
db.items.find().limit(10)
// veya
db.items.find({}, { limit: 10 })// Sayfa 2
db.items.find().skip(10).limit(10)
// veya
db.items.find({}, { limit: 10, skip: 10 })
// Sayfa 3
db.items.find().skip(10).limit(10)
// veya
db.items.find({}, { limit: 10, skip: 10 })
Umarım faydalı olmuştur.
Makale serisinin diğer yazıları için alttaki linkleri kullanabilirsiniz.
- Distributed Sistemlerde Consistency Kavramı ve Document DB Karşılaştırmaları (MongoDB Öğreniyoruz 1)
- MongoDB Kurulum ve CRUD İşlemleri (MongoDB Öğreniyoruz 2)
- MongoDB’de Embedded, Referenced Document ve Relation Kavramları (MongoDB Öğreniyoruz 3)
- MongoDB’de Detaylı Sorgulama/Querying (MongoDB Öğreniyoruz 4)
- MongoDB’de Index Kullanımı ve Sorgu Optimizasyonu (MongoDB Öğreniyoruz 5)
- MongoDB’de Aggregation Pipeline Stage Kullanımı (MongoDB Öğreniyoruz 6)
- MongoDB’de Aggregation Pipeline Operation Kullanımı ve Sorgu Optimizasyonu (MongoDB Öğreniyoruz 7)
- MongoDB’ de Transaction Yönetimi (MongoDB Öğreniyoruz 8)
- MongoDB’ de Role Tabanlı Yetkilendirme (MongoDB Öğreniyoruz 9)
- MongoDB’de Büyük Obje ve Dosyaların GridFS ile Yönetimi(MongoDB Öğreniyoruz 10)
Kaynaklar
Originally published at https://github.com.