根据其uid删除多个条目

时间:2013-10-04 18:25:17

标签: mongodb phalcon

好的,我有这个数组:

$ids = array(
    "524f03c7a52c37a02100000f",
    "574f03c7a52c37a02100002f",
    "524f03c7a52c37a02100321f"
);

并希望删除具有这些ID的条目。我试过这个:

$carriers = Carriers::find([
    "_id" => ["in" => $ids]
]);

和此:

$carriers = Carriers::find(["_id" => $ids]);

甚至这个:

$carriers = Carriers::findById($ids);

但它们似乎都不起作用。任何人都知道我如何根据一系列ID进行查找?


更新

以下是用于删除的整个代码(根据@WiredPrairie解决方案):

public function removeCarrierAction()
{
    $request = new Phalcon\Http\Request();
    if($request->isPost() == true){
        if($request->isAjax() == true){

            //get the string containing the uids and explode it into an array
            $ids = explode(",",$request->getPost(0));
            //do the query
            $carriers = Carriers::find([['_id' => ['$in' => $ids]]]);

            //delete with foreach
            foreach($carriers as $carrier){       
                if($carrier->delete() == true){
                    echo "true";
                }else{
                    echo "error";
                }
            }
        }
    }
}

当我打印count($carriers)时,它会0。但由于某种原因,上面的代码删除了集合中的所有条目。


更新(解决方案:)

问题很简单,当你使用MongoDB中的id时,必须将其id转换为有效的MongoId() class。如果您只是将uid作为字符串传递,它就不起作用。你必须在...之前转换它,所以我的代码现在就像:

    public function removeCarrierAction()
{
    $request = new Phalcon\Http\Request();
    if($request->isPost() == true){
        if($request->isAjax() == true){

            //get and array of ids, and then apply MongoId() to each one of them
            $ids = explode(",",$request->getPost(0));
            $c = count($ids);
            for($i=0;$i<$c;$i++){
                $ids[$i] = new MongoId($ids[$i]);
            }

            //and then do the query
            $carriers = Carriers::find([['_id' => ['$in' => $ids]]]);
            //...
            //do the delete loop here
        }
    }
}

就是这样。

以下是提示:使用MongoDB时,唯一不需要使用MongoId()转换ID的情况正在使用::findById(),否则始终使用MongoId()转换您的ID。

1 个答案:

答案 0 :(得分:0)

    find(["_id" => ["$in" => $id]])

这应该有用。