Драйвер PHP mongoDb, извлекающий и удаляющий данные, не работает - PullRequest
0 голосов
/ 25 марта 2011

Это пример кода:

  $r = $coll->findOne();
  $coll->remove(array("_id"=>$r["_id"]));  // use the same object id as retreived from DB
  $ret=$coll->findOne(array("_id"=>($r["_id"])));
  var_dump($ret);  // dumps the records that was supposed to be deleted

Записи в коллекции имеют идентификатор объекта MongoDB, а не строки. Та же логика на консоли работает нормально и корректно удалила запись.

Ответы [ 3 ]

2 голосов
/ 26 марта 2011

Это работает для меня.Вот код:

$coll->drop();
print("Now have ".$coll->count()." items\n");

$coll->insert(array("x" => 'blah'));
$coll->insert(array("x" => "blahblah"));
print("Inserted ".$coll->count()." items\n");

$x = $coll->findOne();
print("Object X\n");
print_r($x);
$query_x = array('_id' => $x['_id']);
$coll->remove($query_x);
print("Removed 1 item, now have ".$coll->count()." items\n");

$y = $coll->findOne($query_x);
print("Object Y\n");
print_r($y);

Вот результат:

Now have 0 items
Inserted 2 items
Object X
Array
(
    [_id] => MongoId Object
        (
            [$id] => 4d8d124b6803fa623b000000
        )

    [x] => blah
)
Removed 1 item, now have 1 items
Object Y

Вы уверены, что где-то нет опечатки?

0 голосов
/ 07 июня 2011

Поскольку PHP имеет свободную типизацию, очень важно убедиться, что вы привели все входные значения и значения поиска к ожидаемому и согласованному типу данных, иначе он точно не найдет ваш ожидаемый документ.

При использовании MongoDB вPHP Я намерен разыграть все преднамеренно, чтобы избежать любой путаницы или ошибки.

Кроме того, группа mongodb-user на groups.google.com очень хорошая и отзывчивая, так что если вы еще этого не сделалииспользуя этот ресурс, я определенно хотел бы присоединиться к нему.

0 голосов
/ 26 марта 2011

В отличие от оператора php ==, оператор равенства mongo всегда использует «равенство объектов», которое похоже на оператор сравнения php (===) или java's .equals (). Хотя ваш код выглядит так, как будто он должен работать (и он отлично работает для меня с тестовым набором данных), что-то в вашем наборе данных может быть причиной того, что php преобразует возвращенный MongoId в строку. Узнайте больше о MongoId здесь .

Убедитесь, что ваш запрос предоставляет MongoId для сравнения, выполнив var_dump самого запроса. Также убедитесь, что у вас установлена ​​последняя версия драйвера PHP Mongo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...