2014-04-16 2 views
1

이 코드를 작성했으며 mongodb의 초보자입니다. 페이지가 호출 될 때마다 새 컬렉션이 만들어 집니까? 그렇다면 어떻게 이것을 막을 수 있습니까?매번 새로운 컬렉션이 생성됩니까?

<?php 

error_reporting(1); 
ini_set('display_errors', 1); 

//connect 
$m = new MongoClient(); 
$db = $m->selectDB('test'); 

echo '<pre>'; 

//check connect 
if($db){ 
    echo 'yeah connection done check </br>'; 
}else{ 
    echo 'nop'; 
    die; 
} 


//create table or collection 
    $log = $db->createCollection("test_16042014",array()); 

    if($log){ 

//insert into 
     $log->insert(array("name" => "sagar", 
          "email" => "[email protected]", 
          "date_time" => new MongoDate() 
          ) 
        ); 
    }else{ 
     echo 'nop'; 
     die; 
    } 

답변

2

에 사용 될 수있는 몇 가지 몽고 래퍼 라이브러리있다 :이 명령은 생성이 방법이 주로 사용된다 명시 적으로

모음 새로운 capped 컬렉션을 생성합니다. 일반 컬렉션에 대한 공간을 미리 할당하는데도 사용됩니다.

이 메서드를 두 번 호출하거나 이미 존재하는 컬렉션을 만들려고하면 오류가 발생합니다 ("컬렉션이 이미 있습니다").

MongoDB의 컬렉션은 컬렉션에서 이 참조되면 암시 적으로 만들어집니다.

즉, 아직 존재하지 않는 컬렉션에 문서를 삽입하려고하면 MongoDB가 컬렉션을 생성합니다.

예에서 안전하게 명령을 제거하고 insert 메서드를 사용하여 새 컬렉션을 만들 수 있습니다.

+0

하지만 내 컬렉션이 이미 존재한다는 오류가 표시되지 않습니다. 그러면 일어날 일을 어떻게 알 수 있습니까? – SagarPPanchal

+1

MongoDB 셸에서이 명령을 입력하려고하면 오류가 발생합니다. PHP는 오류가 아닌 MongoCollection 객체를 반환합니다. –

+0

설명해 주셔서 감사합니다 :) – SagarPPanchal

1

컬렉션이 있는지 확인하기 만하면 간단한 Google 후에이 코드를 발견했습니다. 그것을 사용하여 create + insert 주위에 if 절을 넣어서 콜렉션이 아직 존재하지 않는 경우에만 삽입 할 수 있도록해야합니다.

public function collection_exists($collection){ 

    if ($this->db->system->namespaces->findOne(array('name'=>'eI_db.'.$collection)) === null){ 
     return false; 
    } 
    return true; 

} 

여기서 $ this-> db는 현재 참조 된 데이터베이스입니다. 설정을 테스트하기 위해 조정해야 할 수도 있습니다.

또한 당신에게 createCollection 방법에 대한 MongoDB를 문서에 명시된 바와 같이 http://code.google.com/p/mongodb-morph/

관련 문제