2013-04-18 98 views
0

的值我有以下形式的文件:的MongoDB + PHP:刪除子陣列

[uuid] => d030b8d1 
[commentstrings] => Array (
    [0] => 1366220389#[email protected]#test 1 
    [1] => 1366220422#[email protected]#test 2 
    [2] => 1366220458#[email protected]#test 3 
) 

我有commentstrings之一的滿弦和要刪除該值。

如果我試試這CLI,它的工作原理:

db.messages.update(
    {'uuid':'d030b8d1'}, 
    { $pull : { 
     'commentstrings': '1366220422#[email protected]#test 2' 
    }} 
) 

但是,如果我嘗試在PHP沒有同樣的情況:

$response = $stdb->messages->update(
    array('uuid'=>'d030b8d1'), 
    array('$pull' => array('commentstrings' => '1366220422#[email protected]#test 2')) 
); 

任何想法,我在做什麼錯在這裏?

回答

1

我沒有得到這個行爲:

$mongodb->ghghghg->insert(array('uuid' => 'd030b8d1', 
     'commentstrings' => Array (
      '1366220389#[email protected]#test 1', 
      '1366220422#[email protected]#test 2', 
      '1366220458#[email protected]#test 3' 
))); 

var_dump($mongodb->ghghghg->findOne()); 

$response = $mongodb->ghghghg->update(
     array('uuid'=>'d030b8d1'), 
     array('$pull' => array('commentstrings' => '1366220422#[email protected]#test 2')) 
); 

var_dump($mongodb->ghghghg->findOne()); 

打印:

array 
    '_id' => 
    object(MongoId)[19] 
     public '$id' => string '516ffff96803fa2261000000' (length=24) 
    'uuid' => string 'd030b8d1' (length=8) 
    'commentstrings' => 
    array 
     0 => string '1366220389#[email protected]#test 1' (length=30) 
     1 => string '1366220422#[email protected]#test 2' (length=30) 
     2 => string '1366220458#[email protected]#test 3' (length=30) 

array 
    '_id' => 
    object(MongoId)[18] 
     public '$id' => string '516ffff96803fa2261000000' (length=24) 
    'commentstrings' => 
    array 
     0 => string '1366220389#[email protected]#test 1' (length=30) 
     1 => string '1366220458#[email protected]#test 3' (length=30) 
    'uuid' => string 'd030b8d1' (length=8) 

什麼版本的驅動程序你,也是你的PHP版本是?您是否確定commentstrings是數組?查看MongoDB控制檯,而不是通過PHP,看看它打印出來的樣子。

+0

感謝您的測試用例 - 它也在這裏工作。 我發現問題 - 這是一個錯字! : -/ 感謝您的幫助! – blitzkid

+0

@blitzkid heh我們都這麼做:)很高興有幫助 – Sammaye

0

試試這個

$response = $stdb->messages->update(array('uuid'=>'d030b8d1'),array('$pull' => array('commentstrings' => '1366220422\#mac\@test.org\#test 2'))); 
+0

我不能使用mongo id。我已經找到了它自己的uuid上的項目。問題是刪除其中一個評論串。 – blitzkid

+0

也許問題出在'1366220422#[email protected]#test 2'把'1366220422 \ #mac \@test.org \ #test 2'代替,然後再試 –

+0

或者問題出在mongodb上。復位mongodb的並再次嘗試 –

0

嘗試

$data = array('$pull' => array('commentstrings' => '1366220422#[email protected]#test 2')); 
$response = $stdb->messages->update(array('uuid'=>'d030b8d1'), $data); 
var_dump($response); 

什麼回報?

+0

'[updatedExisting] => [N] => 0 [的ConnectionId] => 2314 [ERR] => [OK] => 1' 似乎確定,但不刪除任何東西。 – blitzkid

0

原來我的代碼是正確的。這是一個變量的錯字。