0

我有一份格式如下的文件:

[uuid] => d030b8d1
[commentstrings] => Array (
    [0] => 1366220389#mac@test.org#test 1
    [1] => 1366220422#mac@test.org#test 2
    [2] => 1366220458#mac@test.org#test 3
)

我有一个评论字符串的完整字符串,并且想要删除该值。

如果我在 CLI 上尝试这个,它可以工作:

 db.messages.update(
     {'uuid':'d030b8d1'}, 
     { $pull : {
         'commentstrings': '1366220422#mac@test.org#test 2'
     }} 
 )

但是,如果我在 PHP 中尝试相同的操作,则不会发生任何事情:

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

知道吗,我在这里做错了什么?

4

4 回答 4

1

我没有得到这种行为:

$mongodb->ghghghg->insert(array('uuid' => 'd030b8d1',
        'commentstrings' => Array (
            '1366220389#mac@test.org#test 1',
            '1366220422#mac@test.org#test 2',
            '1366220458#mac@test.org#test 3'
)));

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

$response = $mongodb->ghghghg->update(
        array('uuid'=>'d030b8d1'),
        array('$pull' => array('commentstrings' => '1366220422#mac@test.org#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#mac@test.org#test 1' (length=30)
      1 => string '1366220422#mac@test.org#test 2' (length=30)
      2 => string '1366220458#mac@test.org#test 3' (length=30)

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

您使用的是什么版本的驱动程序以及您的 PHP 版本?

你也确定这commentstrings是一个数组吗?查看 MongoDB 控制台,而不是通过 PHP,看看它打印出来的样子。

于 2013-04-18T14:16:41.037 回答
0

试试这个

$response = $stdb->messages->update(array('uuid'=>'d030b8d1'),array('$pull' => array('commentstrings' => '1366220422\#mac\@test.org\#test 2')));
于 2013-04-18T13:50:33.920 回答
0

尝试

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

什么回报?

于 2013-04-18T13:56:01.333 回答
0

事实证明我的代码是正确的。这是变量中的错字。

于 2013-04-18T14:57:25.823 回答