你能否告诉我为什么我不能使用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'];
}
}
谢谢。
答案 0 :(得分:0)
为了解决这个问题,我在方法remove中找到了Collection.php的源代码:
/* if (array_key_exists('_id', $criteria) && !($criteria["_id"] instanceof MongoId)) {
$criteria["_id"] = new MongoId($criteria["_id"]);*/
在条件与$工作。也许未来版本的库会修复它。