好的,所以我有这个数组:
$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()
。