как удалить документы с каким-то идентификатором в библиотеке шанти mongodb - PullRequest
0 голосов
/ 23 февраля 2012

Подскажите, пожалуйста, почему я не могу удалить из записей коллекции идентификаторы, которые есть в списке с помощью mongodb $ in, но я могу удалить их, если я использую драйвер mongodb напрямую. Здесь идентификаторы _id генерируются в mongodb автоматически. Это работает:

array_walk($ids, function(&$item, $key) { $item = new MongoId(trim($item)); });

$conditions = array('_id' => array('$in' => $ids),
               );       

$mongo = new Mongo();
$db = $mongo->test; 
$collection = $db->mycollection;
$result = $collection->remove($conditions, array('safe' => true));

Но использование метода remove класса Shanty_Mongo_Document по некоторым причинам не работает с теми же данными:

class MyDocument extends Shanty_Mongo_Document
{

    public static function bulkDelete($ids)
    {

        array_walk($ids, function(&$item, $key) { $item = new MongoId(trim($item)); });

        $conditions = array('_id' => array('$in' => $ids)
                           );           
        $result = self::remove($conditions, array('safe' => true));
        return $result['n'];        
    }
}

Спасибо.

1 Ответ

0 голосов
/ 28 февраля 2012

Чтобы решить эту проблему, я прокомментировал исходный код Collection.php в методе remove:

/*        if (array_key_exists('_id', $criteria) && !($criteria["_id"] instanceof MongoId)) {
                $criteria["_id"] = new MongoId($criteria["_id"]);*/

После этого условия с $ в работе.Возможно будущие версии библиотеки это исправят.

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