Aşağıdaki yöntemlerden birini kullanarak belgeleri okuyabilir, sorgu yapabilirsiniz:
db.[tablo adı].find(<query>,projection)
- query, sqldeki where gibi, sorgularımızdır.
- projection, değerleri sonuç kümesinden seçmek için alanların listesine karşılık gelir.
Örneğin tablo adımız user olsun.
db.user.find() ile user içindeki tüm alanlar listelenir.
Belge içindeki "_id" alanı 3 olanları listelemek istiyorsak;
> db.user.find(
{
_id: 3
}
)
OR (veya) kullanımı
> db.user.find(
{
_id: {
$in : [ 3, 5 ]
}
}
)
"$in" imleci ile koşullardan herhangi birinin geçerli olması durumu için kullanılır. Yani sqldeki or gibi düşünebilirsiniz. Üstteki örnekte _id değeri 3 ya da 5 olanlar listenecektir.
Between Kullanımı
db.collection.find( { field: { $gt: value1, $lt: value2 } } );
- collection: Belge (sqldeki tablo ) adı
- field: Değişkendir. Örneğin _id, name, age gibi
- $gt: Değerin taban (düşük) değişken adını ifade eder. İsmi sabittir.
- $lt: Değerin tavan (büyük) değişken adını ifade eder. İsmi sabittir.
- value1, value2: taban ve tavan değerlerimiz.
Örnek uygulama:
> db.user.find (
{
_id : {
$gt : 2,
$lt : 5
}
}
)
Üstteki örnekte _id değeri 2 ile 5 arasındaki değerler yani 2 ve 3 listenecektir.
Array ile birden fazla alan sorgulama
Aşağıdaki gibi bir kayıt ekleyelim.
> db.bios.insert ({
"_id" : 1,
"name" : {
"first" : "John",
"last" :"Backus"
},
"birth" : ISODate("1924-12-03T05:00:00Z"),
"death" : ISODate("2007-03-17T04:00:00Z"),
"contribs" : [ "Fortran", "ALGOL", "Backus-Naur Form", "FP" ],
"awards" : [
{
"award" : "W.W. McDowellAward",
"year" : 1967,
"by" : "IEEE Computer Society"
},
{
"award" : "National Medal of Science",
"year" : 1975,
"by" : "National Science Foundation"
},
{
"award" : "Turing Award",
"year" : 1977,
"by" : "ACM"
},
{
"award" : "Draper Prize",
"year" : 1993,
"by" : "National Academy of Engineering"
}
]
})
Örneğin şu şekilde bir arama yaptırabiliriz.
> db.bios.find(
{
awards: {
$elemMatch: {
award: 'Turing Award',
year: { $gt: 1980 }
}
}
}
)
Buradaki sorguda awards arrayındaki award alanı "Turing Award" ve year alanı 1980 den düşük kayıtlar listenecektir.
Alt Dökümanlar
Sorgulanacak belgenin alanları aynı olmalıdır. Örneği aşağıdaki gibi kayıtlar ekleyelim.
> db.bios.insert(
{
name: {
first: 'Yukihiro',
aka: 'Matz',
last: 'Matsumoto'
}
}
)
> db.bios.insert(
{
name: {
first: 'Matsumo',
last: 'Agileto'
}
}
)
Aşağıdaki gibi alt döküman sorgusu yapabiliriz.
> db.bios.find(
{
'name.first': 'Yukihiro'
}
)
Burada name alanının altındaki first alanına göre sorgu yapıyoruz. Yani ismi "Yukihiro" olanları listeliyor.
Mantıksal Operatörler
OR operatörü
Kullanımı:
Buarada name alanı altındaki first alanının G ile başlayanları ya da 01/01/1945 den büyük olanları listelemektedir.
AND Operatörü
Kullanımı:
kullanımı
> db.example.find().skip(3) // sorgu sonucunda ilk 3 kayıt atlanarak diğer kayıtlar listelenir.
Kullanımı
db.collection.findOne( <query>, <projection> )
Örnek uygulama
> db.example.findOne(
{
_id: 1
}
)
- find()
- findOne()
find()
Bu metod, koleksiyon belgelerini seçmek için birinci yöntemdir. Sözdilimi ise şöyledir:db.[tablo adı].find(<query>,projection)
- query, sqldeki where gibi, sorgularımızdır.
- projection, değerleri sonuç kümesinden seçmek için alanların listesine karşılık gelir.
Örneğin tablo adımız user olsun.
db.user.find() ile user içindeki tüm alanlar listelenir.
Belge içindeki "_id" alanı 3 olanları listelemek istiyorsak;
> db.user.find(
{
_id: 3
}
)
OR (veya) kullanımı
> db.user.find(
{
_id: {
$in : [ 3, 5 ]
}
}
)
"$in" imleci ile koşullardan herhangi birinin geçerli olması durumu için kullanılır. Yani sqldeki or gibi düşünebilirsiniz. Üstteki örnekte _id değeri 3 ya da 5 olanlar listenecektir.
Between Kullanımı
db.collection.find( { field: { $gt: value1, $lt: value2 } } );
- collection: Belge (sqldeki tablo ) adı
- field: Değişkendir. Örneğin _id, name, age gibi
- $gt: Değerin taban (düşük) değişken adını ifade eder. İsmi sabittir.
- $lt: Değerin tavan (büyük) değişken adını ifade eder. İsmi sabittir.
- value1, value2: taban ve tavan değerlerimiz.
Örnek uygulama:
> db.user.find (
{
_id : {
$gt : 2,
$lt : 5
}
}
)
Üstteki örnekte _id değeri 2 ile 5 arasındaki değerler yani 2 ve 3 listenecektir.
Array ile birden fazla alan sorgulama
Aşağıdaki gibi bir kayıt ekleyelim.
> db.bios.insert ({
"_id" : 1,
"name" : {
"first" : "John",
"last" :"Backus"
},
"birth" : ISODate("1924-12-03T05:00:00Z"),
"death" : ISODate("2007-03-17T04:00:00Z"),
"contribs" : [ "Fortran", "ALGOL", "Backus-Naur Form", "FP" ],
"awards" : [
{
"award" : "W.W. McDowellAward",
"year" : 1967,
"by" : "IEEE Computer Society"
},
{
"award" : "National Medal of Science",
"year" : 1975,
"by" : "National Science Foundation"
},
{
"award" : "Turing Award",
"year" : 1977,
"by" : "ACM"
},
{
"award" : "Draper Prize",
"year" : 1993,
"by" : "National Academy of Engineering"
}
]
})
Örneğin şu şekilde bir arama yaptırabiliriz.
> db.bios.find(
{
awards: {
$elemMatch: {
award: 'Turing Award',
year: { $gt: 1980 }
}
}
}
)
Buradaki sorguda awards arrayındaki award alanı "Turing Award" ve year alanı 1980 den düşük kayıtlar listenecektir.
Alt Dökümanlar
Sorgulanacak belgenin alanları aynı olmalıdır. Örneği aşağıdaki gibi kayıtlar ekleyelim.
> db.bios.insert(
{
name: {
first: 'Yukihiro',
aka: 'Matz',
last: 'Matsumoto'
}
}
)
> db.bios.insert(
{
name: {
first: 'Matsumo',
last: 'Agileto'
}
}
)
Aşağıdaki gibi alt döküman sorgusu yapabiliriz.
> db.bios.find(
{
'name.first': 'Yukihiro'
}
)
Burada name alanının altındaki first alanına göre sorgu yapıyoruz. Yani ismi "Yukihiro" olanları listeliyor.
Mantıksal Operatörler
OR operatörü
Kullanımı:
> db.bios.find(
{ $or: [
{ 'name.first' : /^G/ },
{ birth: { $lt: new Date('01/01/1945') } }
]
}
)
Buarada name alanı altındaki first alanının G ile başlayanları ya da 01/01/1945 den büyük olanları listelemektedir.
AND Operatörü
Kullanımı:
> db.bios.find(
{
'name.first': /^K/,
contribs: 'UNIX'
}
)
first alanının K ile başlaması ve constribs listesinde "UNIX" kaydının bulunması durumunda kayıtları geri döndürür.
Sonucun Değişkene Aktarılması
var C = db.example.find({_id:1})
Burada C değişkeni array özelliğinde olur. Bulunan değerleri görüntülemek için aşağıdaki yolları kullanabilirsiniz:
1. İndex Değeri
Tek bir kayıt görüntülemek için kullanılır. Kullanımı şu şekildedir.
DegiskenAdi[index]
Örnek uygulama:
> C[2]
2. next() Metodu
Belirtilen değerden bir sonrakini bulmak için kullanılır.
Örnek uygulama:
> var document = C.hasNext() ? C.next() : null;
> if(document) {
var name = document.name;
print (tojson(name));
}
3. forEach() Metodu
Bulunan değerlerin tamamını listeler.
Örnek uygulama:
> var c = db.example.find(
{
_id: {
$gt:1,
$lt:6
}
}
)
> c.forEach(printjson)
sort()
Sonuçları sıralamak için sort() idafesi kullanılır.
Kullanımı:
> db.example.find().sort({ name : 1 }); // Normal yani küçükten büyüğe
> db.example.find().sort({ name : -1 }); // Ters yani büyükten küçüğe sıralama
Limit()
Sorgu sonucudan ilk 50, son 20 kayıt diye bir limit koyabiliriz. Bunu da mongodb de limit() ifadesiyle yapılıyor.
Kullanımı
> db.example.find().limit(5) // 5 kaydı göster
skip()
Sorgu sonucunda belirli kayıtları göstermemek ya da belirli kayıtları atlayıp, diğer kayıtları görüntülemek isteyebiliriz. Bu işlem de skip() ile yapılıyor.kullanımı
> db.example.find().skip(3) // sorgu sonucunda ilk 3 kayıt atlanarak diğer kayıtlar listelenir.
findOne()
findOne() tek bir belgeyi (kaydı) seçer. Sorgu sonucunda da bir değişken (imleç) dönüştürmez.Kullanımı
db.collection.findOne( <query>, <projection> )
Örnek uygulama
> db.example.findOne(
{
_id: 1
}
)
Hiç yorum yok:
Yorum Gönder