2011-08-07 4 views
1

서비스 용으로 배열 요소 [1]을 제거하고 비용을 청구하고 싶습니다. 문제는 언제든지 다른 요소

이 동일한 값을 포함하므로 모든 요소가 제거된다는 것입니다. [1] - [8]과 [10] - [15]. 나는 괄호 안에 요소 식별자를 지정하여이 제한을 제한하려고 시도했으나 작동하지 않습니다.

중복 값이없는 경우 다음 코드가 완벽하게 작동합니다. [1]과 [9]는 문제없이 제거 할 수 있습니다.

$forward = $_POST['id']; 
$conn = new Mongo('localhost'); 
$db = $conn->pianos; 
$collection = $db->names; 
$criteria = array('_id' => $forward,); 


// Find single document by ID Variable 
$obj = $collection->findOne($criteria); 


// define variables for Array objects 
$service = $obj['service'] [$i]; 
$charge = $obj['charge'] [$i]; 

$serv = array('service' => $service, 'charge' => $charge); 

$upsert = true; 
     $collection->update($obj, array('$pull' => $serv) ,array("upsert" => $upsert));    

PhpMoAdmin이 제공 한 문서의 구조는 다음과 같습니다.

[$_id] => MongoID Object (
    [$id] => 4e3a8a457bfb8b2817000002 
) 

[fname] => Billy Bob 
[lname] => Thornton 

[service] => Array (
[0] => Tune 2 pianos 
[1] => Tuned 
[2] => Tuned 
[3] => Tuned 
[4] => Tuned 
[5] => Tuned 
[6] => Tuned 
[7] => Tuned 
[8] => Tuned 
[9] => Called 
[10] => Tuned 
[11] => Tuned 
[12] => Tuned 
[13] => Tuned 
[14] => Tuned 
[15] => Tuned 
) 
[charged] => Array (
[0] => 100.00 
[1] => 50.00 
[2] => 50.00 
[3] => 50.00 
[4] => 50.00 
[5] => 50.00 
[6] => 50.00 
[7] => 50.00 
[8] => 50.00 
[9] => 0.00 
[10] => 50.00 
[11] => 50.00 
[12] => 50.00 
[13] => 50.00 
[14] => 50.00 
[15] => 50.00 
) 

답변

2

MongoDB에는 이에 대한 수정 자 연산이 없습니다.

모든 항목에 대해 서비스 날짜를 추가하여 모든 항목이 고유해질 수 있습니다. 또한 디자인 측면에서 서비스 이름 인 데이터 & (그리고 나중에 추가하는 항목)을 포함하는 배열 하위 문서를 저장하는 것이 좋습니다.

"스키마"를 사용하면 문서 전체를 검색하고 클라이언트 측에서 수정 한 다음 다시 쓸 수 있습니다. 이것은 원자적일 수는 없으므로 특정 시간에 문서를 수정할 수있는 사용자가 한 명만 있는지 확인하십시오.