• 18-03-2014, 10:08:05
    #1
    Arkadaşlar bundan sonra veritabanı olarak mongodb kullanmaya karar verdim ama çok acemilik çekiyorum. Takıldığım birçok yer var aslında ama öncelikli sorunum id hakkında.

    Mongodbnin kendi eklediği id olan ObjectId("5327e425b5c39ba817000008") şeklinde mi kullanmam daha doğru olur yoksa numeric auto increment değeri mi eklemeliyim ki bu durumda her insertte fazladan bir sorgu yapmam gerekçek.

    Eğer mongodbnin atadığı id değerini kullanırsam (ki şu an bu yolda ilerliyorum); ilgili documentle (satır) başka collectiona (tablo) ait documentleri ilişkilendirmem gerektiğinde ilişkilendilcek olan documentin idsini ObjectId("id") şeklinde mi yoksa sadece id şeklinde mi kullanmalıyım?

    aşağıdaki resim üstünde soruyu anlamak daha kolay olcaktır. Örnekte bir kategorinin bir üst idsini ustid sütununa, birden fazla üst idsi varsa altında olduğu tüm idleri de ustidler sütununa ekliyorum.

    ustid sutununa id değerini sadece id, ustidler sütununa ise tüm üst kategorilerinin id'lerini ObjectId("id") şeklinde girdim.



    Her iki durumda da rahatlıkla erişebiliyorum ama performans açısndan doğru olan nedir? Sizce hangisini kullanmalıyım? Yoksa her insetrtte fazladan bir sorgu yapmam gerekmesine rağmen numeric auto increment mı kullanmalıyım?

    Saygılar.
    .
    .
  • 19-03-2014, 20:57:31
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    @dark_way; şu yazıya göz atmanı tavsiye ederim.
  • 20-03-2014, 12:36:43
    #3
    saintx ilgin için teşekkürler. Aslında konuyu açmamdaki en etkili sebeplerden biri bu dökümandı. Sayısal auto increment değeri ekleyebilmem için 2 yol sunmuş. İkisi de benzer mantıkta çalışıyo ve her iki durumda da inserlerde fazladan bir sorgu yapmam gerekiyor.

    Sıradaki acil sorunum şöyle:

    1 saattir şu sql sorguyu: (select * from uye where apm != "") mongoya uyarlamaya çalışıyorum, gerçekten şaka gibi :S yardımcı olursanız gerçekten çok sevinirim.

    veritabanı yapısı şöyle:


    <?php 
    try{
    	$mongo = new Mongo('mongodb://127.0.0.1:27017');
    }catch(MongoConnectionException $e) { 
    	die('Baglanti Hatası : ' . $e->getMessage());  
    }
    $m	= new MongoClient();
    $db	= $m->vt1;
    
    $sorgu1 = array(
    	"apm" => array( '$ne' => "" )
    );
    $sorgu2 = array(
    	"il" => array( '$ne' => "" )
    );
    $say = $db->uye->find( $sorgu1 )->count();
    echo $say;
    ?>
    $sorgu1'de 0 sonuç dönmesi gerekiyor apm alanı her kayıtta boş ama tüm kayıtları sayıyor. $sorgu2'yi çalıştırınca 1 dönüyor (ki bu doğru), $sorgu1 neden doğru çalışmıyor olabilir ?
  • 20-03-2014, 16:02:01
    #4
    @dark_way;
    $db->uye->find(['apm' => ['$ne' => '']]);
    bunun sonucunu var_dump() ile ekrana yazdırıp konuya ekler misin?
  • 20-03-2014, 16:26:31
    #5
    saintx adlı üyeden alıntı: mesajı görüntüle
    @dark_way;
    $db->uye->find(['apm' => ['$ne' => '']]);
    bunun sonucunu var_dump() ile ekrana yazdırıp konuya ekler misin?
    Hocam update kodunda sorun yokmuş asıl sorunu yeni keşfettim şimdi de ona çözüm arıyorum.

    apm fieldı collectionu oluştururken yoktu sonradan update ile ekledim field collectiona eklendi ama documentlere yansımamış yani hiçbi üyede apm diye bi alan yok. Şimdi varolan kayıtların tamamına field eklemeye çalışıyorum.

    update ve findAndModify ile bişeyler denedim ama bi türlü yapamadım uye isimli bi tablodaki tüm documentlere apm isimli bi alan ekleyecek bir koda ihtiyacım var.

    Gözünü seveyim sqlin

    Ekledi; Döngüyle çözdüm sorunu ama muhakkak daha pratik bi yolu vardır. Bilenler yazarsa sevinirim.
    $q = $db->uye->find();
    foreach( $q as $row ){
    	$db->uye->update( array( "_id" => $row['_id'] ), array('$set'=>array( 'apm' => "" )) );
    }
  • 20-03-2014, 17:01:32
    #6
    @dark_way; şu yazıyı inceleyebilir misin?