如何删除mongodb shanty库中具有一些id的文档

时间:2012-02-23 10:08:39

标签: php zend-framework mongodb

你能否告诉我为什么我不能使用mongodb $ in从列表中的id中删除收集记录,但如果我直接使用mongodb驱动程序,我可以删除它们。这里的id是自动在mongodb中生成的_id。 这个有效:

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));

但是使用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 :(得分:0)

为了解决这个问题,我在方法remove中找到了Collection.php的源代码:

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

在条件与$工作。也许未来版本的库会修复它。