2012-08-31 3 views
5

MongoDBGridFSPHP에 입력하고 _id으로 여러 파일을 삭제하는 방법을 알아 내려고합니다. 여기PHP의 MongoDB GridFS에서 여러 파일 삭제

코드 나는이된다

$ids = array("50401f40ff558cec38000061", "62401f40ff558cec38000072", "73401f40ff558cec38000083"); 
$mongo_ids = array(); 
foreach($ids as $id) { 
    $mongo_ids[] = new MongoId($id); 
} 

$mongo_grid_fs->remove(array("_id" => $mongo_ids)); 

내가 잘못하고있는 중이 야 어떤 생각?

+0

는 MongoDB를 :: lastError()'포스트'의 결과를 확인 괜찮 으면 – Lusitanian

답변

3

이 인한 작동 실제로 GridFS하는 방식.

  • 파일
  • 덩어리

중위는 GridFs 당신이 테이블을 모두 쿼리해야합니다 파일을 삭제합니다 :

당신은 두 개의 컬렉션을 가지고있다. 따라서 remove() 함수는 실제로 청크 컬렉션을 호출 한 다음 파일 컬렉션에서 파일을 제거합니다.

기본적으로 MongoDB는 하나의 요청으로 두 개의 콜렉션을 조회 할 수 없으므로 (삭제 된 파일에 기본적으로 결합됩니다) 파일 삭제 요청을 보내야합니다. 그렇지 않으면 삭제할 요청이 청크에 남게됩니다.

이와 같이 @ToddMoses answer를 고려하면 올바른 답변입니다. http://www.php.net/manual/en/mongogridfs.remove.php 그러나 나는, 너무 쿼리가 있었어야 정확히 같은 일 추상화 않는 생각 :

당신은 물론 사용의 수

$mongo_grid_fs->remove(array("_id" => array('$in' => $mongo_ids))); 
+0

이것은 해결책이었습니다.'$ in'을 사용하여 두 번째 배열이 필요합니다. 감사. – Justin

2

먼저 MongoDB :: lastError()를 사용하여 잘못된 점을 확인하십시오. MongoGridFS :: remove는 실패 할 경우 메시지를 표시하지 않습니다. 같은 것을 할 :

$errorArray = $db->lastError(); 
var_dump($errorArray); 

그것은 문제가 나타납니다 당신이 제대로 기준을 설정하지 않는 것입니다. 이 컬렉션에서 파일을 삭제하는 반면 제거 데이터베이스에서 파일을 삭제

public bool MongoGridFS::delete (mixed $id) 

: 그냥 삭제를 사용하는 대신 삭제하기 때문에 제거되는 가장 쉬운 일이 유일한 매개 변수로 ID를합니다. 어쨌든 반복되기 때문에, 당신은 같은 것을 할 수 있습니다 하나의 요청으로 할 불가능

foreach($ids as $id) { 
    $mongo_grid_fs->delete($id); 
} 
+0

하지만 이렇게하면 여러 요청이 만들어져 효율성이 떨어지며 가능한 한 여러 ID로 전달되는 단일 요청을 선호합니다. – Justin

관련 문제