2013-04-18 2 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 хе-хе мы все это делаем :) рад помочь – Sammaye

0

попробовать это

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

Я не могу использовать идентификатор mongo. Я уже нашел предмет над своим собственным uuid. Проблема состоит в том, чтобы удалить одну из комментариев. – blitzkid

+0

Возможно, проблема находится на '1366220422#[email protected]#test 2' put '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] => [п] => 0 [ConnectionID] => 2314 [ERR] => [ок] => 1' Кажется хорошо, но не удаляет что-нибудь. – blitzkid

0

Оказывается, мой код был верным. Это была опечатка в переменной.

Смежные вопросы