Mongose Boş Array Alana Göre Belgeleri Listelemek

Mongoose İle Boş Array İçermeyen Tüm Kayıtları Listeleme

Eğer array bir özelliği olan belgeler içerisinden array özelliği boş olmayan belgeleri bulmak istersek ne yapacağız.

Mesela elimizde üye bilgilerini tutan users koleksiyonu var. Bunun içerisinde üye bilgilerini tutuyoruz ve bu bilgilerden bir tanesi de üyenin izlediği filimler olsun. Doğal olarak bir kişi 1 veya daha fazla filim izlemiş olacağı için bu bilgi array olarak tutulmalıdır.

mongoose.Shema({
    isim: String,
    yas: Number,
    sehir: String,
    filmler: [String]
});

Burada bizim istediğimiz en az bir filim izlemiş üyeleri listelemek. Bu durumda filmler dizisinin boş olmaması gerekmektedir. Bunu yapmak için

Uye.find({
    filmler: { 
        $exists: true, 
        $ne: [] 
    }
});

Burada filmler alanı üzerinde bir arama yapıyoruz. Bu aramada öncelikle $exists: true diyerek var olup olmadığının denetlenmesini istiyoruz ve ayrıca $ne: [] işlemi ilede ($ne not equal / eşit değil) filmler değerinin boş bir diziye eşit olmaması gerektiğini, yani içerisinde en azından 1 kayıt olması gerektiğini bildiriyoruz.

Bunun sonucunda bize filmler alanı olan ve bu alanın boş değer içermediği tüm Uye kayıtları dönecektir.

Eğer bu alanda geçersiz bir değer olursa bunu nasıl denetleyeceğiz, mesela belgedeki filimler alanı dizi değil de string ise. Bunun için de tip kontrolü yapabiliriz.

Uye.find({
    filmler: { 
        $exists: true, 
        $type: 'array', 
        $ne: [] 
    }
});

Mongoose ile birlikte, Mongodb ile kullanılan arama operatörlerini kullanabiliriz. Bu yazımızda bir dizinin içeriğinin boş olup olmamasına göre nasıl bir arama yapılacağını gördük.

Bunun için öncelikle dizinin var olup olmadığını denetledik. Bunun için $exists operatörünü kullandık

Aynı zamanda alanın tipinin array olmasını $type operatörü ile denetledik.

En sonunda da dizinin içerisinin boş olup olmadığını $ne operatörü ile denetledik. $ne: [] bu ifadenin anlamı eğer dizi boş değilse demektir.

find işlemi yaptığımızdan boş bir değer içermeyen ve array tipindeki filmler alanına sahip tüm üyeler seçilerek listelenecektir.

Belge İçerisinde Bulunan Array Alanı Boş Olan Kayıtları Listeleme

Belge içerisinde bulunan array bir alanın bir değer içermediği tüm kayıtları listelemek istersek bu da mümkündür. Yukarıdaki örneğe dönersek ve bize hiç filim izlememiş üyelerin listesi lazımsa.

Uye.find({
    filmler: { 
        $exists: true, 
        $type: 'array', 
        $eq: [] 
    }
});

Şeklinde bir sorgu hiç bir filim izlememiş üyelerin listesini bize getirecektir. Biz burada $eq: [] diyerek boş bir diziye eşit kayıtları istemiş olduk.

Sonuç

Mongoose ile bir çok işlemi oldukça kolay bir şekilde yapabiliriz. Bunlardan bir tanesi de belge içerisindeki bir alanın boş olup olmadığına göre bir filtreleme yapmaktır. Bunun için alanın tipini ($type), var olup olmadığını ($exist) ve içeriğini ($eq, $ne) denetlememiz gerekecektir.

Mongoose ile ilgili eklemek istediklerinizi yorumlardan bize ulaştırabilirsiniz

Yorum bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir