2013-07-11 28 views
0

這裏是我的代碼:未捕獲的異常「MongoCursorException」有消息....重複鍵錯誤指數:

當我嘗試去解決問題,有一個錯誤,因爲它:

"Fatal error: Uncaught exception 'MongoCursorException' with message 
'localhost:27017: E11000 duplicate key error index: 
    futbol_db.maclar.$kod_1_link_1 dup key: 
    { : null, : null }' in /var/www/html/cagkansokmen/futbol/db/maclar.php:182 
    Stack trace: #0 /var/www/html/cagkansokmen/futbol/db/maclar.php(182):  
    MongoCollection->insert(Array) #1 {main} thrown in 
    /var/www/html/cagkansokmen/futbol/db/maclar.php on line 182" 

的問題是關於插入。因爲,當我刪除插入代碼時,這個代碼沒有問題。但是,如果我嘗試插入數據,就像我說的那樣有一個錯誤。

我該如何解決?

$collection1 = $db->lig_kod; 
$collection_maclar = $db->maclar; 
    $collection1->ensureIndex(array("kod" => 1, "link" => 1), array("unique" => true, "dropDups" => true)); 

    $a = $collection1->find(array())->limit(15)->skip(0); 
    foreach($a as $b){ 
    $kod = $b["kod"]; 
    $link = $b["link"]; 

     $parc = explode(',', $link); 
     $ligkoduson = $parc[0].",".$parc[1]; 
    $url2 = "http://www.stats.betradar.com/s4/gismo.php?&html=1&id=1424&language=tr&clientid=35&state=".$ligkoduson.",5_".$kod.",9_fixtures,231_fixtures,23_1,242_21&child=0"; 
     $url2 = curl($url2); 
     $url2 = str_replace("\t","",$url2); 
     $url2 = str_replace("\n","",$url2); 
     $url2 = str_replace("\r","",$url2); 

     $bul = ara("<![CDATA[", "]]>", $url2); 
     $sonuc = ara("setState('", ",", $bul[0]); 
     $say = count($sonuc); 

     for($i = 0; $i<$say; $i++){ 
     $sezonbul = $sonuc[$i]; 

     $lonk = "http://www.stats.betradar.com/s4/gismo.php?&html=1&id=2127&language=tr&clientid=35&state=".$ligkoduson.",".$sezonbul.",9_fixtures,231_full,23_1&child=2"; 
     $fiksturlink = curl("http://www.stats.betradar.com/s4/gismo.php?&html=1&id=2127&language=tr&clientid=35&state=".$ligkoduson.",".$sezonbul.",9_fixtures,231_full,23_1&child=2"); 

     $fiksturlink = str_replace("\t","",$fiksturlink); 
     $fiksturlink = str_replace("\n","",$fiksturlink); 
     $fiksturlink = str_replace("\r","",$fiksturlink); 

     $kategori = ara('title="', '"', $fiksturlink); 
     $kategori_parcala = explode(' &gt; ', $kategori[0]); 
     $tur = trim($kategori_parcala[0]); 
     $ulke = trim($kategori_parcala[1]); 
      $lig = $kategori_parcala[2]; 
      $lig_parcala = explode(' ', $lig); 
      $lig_bosluk = count($lig_parcala)-1; 
     $sezon = trim($lig_parcala[$lig_bosluk]); 
     $lig_son = trim(str_replace($sezon, "", $lig)); 


      $takimlar = ara('<span class="teams">', '</a>', $fiksturlink); 
      $timebul = ara('<td class="datetime">', '</td>', $fiksturlink); 
      $fhbul = ara('<td class="p1 ">', '</td>', $fiksturlink); 
      $ftbul = ara('<td class="nt ftx ">', '</td>', $fiksturlink); 
      $dongusay = count($takimlar); 
     echo $dongusay."<br>"; 
     for($dongu = 0; $dongu<$dongusay; $dongu++){ 
      $takimlarbul = ara('">', '</span>', $takimlar[$dongu]); 

      $home = trim($takimlarbul[0]); 
      $away = trim($takimlarbul[2]); 
       $time = trim($timebul[$dongu]); 
       $time_ayir = explode(' ', $time); 
       $yil_ayir = explode('/', $time_ayir[0]); 
        $gun = $yil_ayir[0]; 
        $ay = $yil_ayir[1]; 
        $yil = $yil_ayir[2]; 
       $saat_ayir = explode(':', $time_ayir[1]); 
        $saat = $saat_ayir[0]; 
        $dk = $saat_ayir[1]; 
      $time_sonuc = mktime($saat, $dk, 0, $ay, $gun, $yil); 
      $fh = trim($fhbul[$dongu]); 
       if(empty($fh)){ 
       $fh1 = null; 
       $fh2 = null; 
       }else{ 
       $fh_ayir = explode(':', $fh); 
       $fh1 = $fh_ayir[0]; 
       $fh2 = $fh_ayir[1]; 
       } 
      $ft = trim($ftbul[$dongu]); 
      if(empty($ft)){ 

       $ft1 = null; 
       $ft2 = null; 

      }else{ 
       if(strpos($ft, '(')){ 

        $parcala1 = explode('(', $ft); 
        $ft_ayir = explode(':', $parcala1[0]); 
        $ft1 = $ft_ayir[0]; 
        $ft2 = $ft_ayir[1]; 

       }else{ 

        $ft_ayir = explode(':', $ft); 
        $ft1 = $ft_ayir[0]; 
        $ft2 = $ft_ayir[1]; 
       } 
      } 
     echo $ligkoduson."-".$sezonbul."-".$tur."-".$ulke."-".$lig_son."-".$sezon."-".$home."-".$away."-".$time_sonuc."-".$fh1."-".$fh2."-".$ft1."-".$ft2."<br>"; 

     $collection_maclar->insert(array(
     'ulke_kodu'=>$ligkoduson, 
     'sezon_kodu'=>$sezonbul, 
     'tur'=>$tur, 
     'ulke'=>$ulke, 
     'lig'=>$lig_son, 
     'sezon'=>$sezon, 
     'home'=>$home, 
     'away'=>$away, 
     'tarih'=>$time_sonuc, 
     'fh1'=>$fh1, 
     'fh2'=>$fh2, 
     'ft1'=>$ft1, 
     'ft2'=>$ft2 
     )); 
     } 
     } 

     } 
+0

從錯誤似乎是你有一個唯一索引,和你綁插入第二個文檔,而無需那些索引字段(即「空」再次得到插入,本文檔中索引)導致索引中出現重複鍵異常。 –

+1

[mongo \ _id字段重複鍵錯誤]的可能重複(http://stackoverflow.com/questions/17114851/mongo-id-field-duplicate-key-error) – WiredPrairie

回答

0

您對「KOD」和「鏈接」的唯一指標,但您要插入的文件不包含任何這些字段名的。

這意味着您插入的第一個文檔將具有這些值爲空,而第二個文檔也會......但由於它創建了您創建的唯一索引而失敗。

請注意,您使用ensureIndex()命令提供的「dropDupe」標誌僅意味着「刪除現有的重複項」,而不是「如果我再次嘗試使用該項,則刪除以前的文檔」。

您目前的代碼似乎確保了「lig_kod」集合上的此索引,但我懷疑您之前可能(或許意外)使用了$ collection_maclar變量,而不是$ collection1變量並執行代碼,導致在maclar集合上創建索引。

-Hannes

相關問題