好的,我有这个数组:
$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。
答案 0 :(得分:0)
find(["_id" => ["$in" => $id]])
这应该有用。