1

好的,所以我有这个数组:

$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() 类。如果您只是将 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 时,唯一不需要转换 id 的场合MongoId()是 using ::findById(),否则,总是用 . 转换你的 id MongoId()

4

1 回答 1

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

这应该有效。

于 2013-10-04T20:13:34.293 回答