2011-03-25 67 views
0

這是示例代碼:PHP MongoDB的驅動程序,獲取數據,然後將其刪除,不工作

$r = $coll->findOne(); 
    $coll->remove(array("_id"=>$r["_id"])); // use the same object id as retreived from DB 
    $ret=$coll->findOne(array("_id"=>($r["_id"]))); 
    var_dump($ret); // dumps the records that was supposed to be deleted 

集合中的記錄有MongoDB的對象ID,而不是字符串。 控制檯上的相同邏輯正常工作並正確刪除記錄。

回答

2

這是爲我工作。下面的代碼:

$coll->drop(); 
print("Now have ".$coll->count()." items\n"); 

$coll->insert(array("x" => 'blah')); 
$coll->insert(array("x" => "blahblah")); 
print("Inserted ".$coll->count()." items\n"); 

$x = $coll->findOne(); 
print("Object X\n"); 
print_r($x); 
$query_x = array('_id' => $x['_id']); 
$coll->remove($query_x); 
print("Removed 1 item, now have ".$coll->count()." items\n"); 

$y = $coll->findOne($query_x); 
print("Object Y\n"); 
print_r($y); 

下面是輸出:

Now have 0 items 
Inserted 2 items 
Object X 
Array 
(
    [_id] => MongoId Object 
     (
      [$id] => 4d8d124b6803fa623b000000 
     ) 

    [x] => blah 
) 
Removed 1 item, now have 1 items 
Object Y 

你確定有沒有一個錯字的地方?

0

不同於PHP ==操作符,蒙戈平等操作者始終使用「對象平等」,這是如php的相同比較運算符(===)或Java的.equals()。雖然你的代碼看起來應該可以工作(並且它對測試數據集的工作很好),但是關於數據集的一些問題可能會導致PHP將返回的MongoId轉換爲字符串。 Read more about MongoId here

確保您的查詢做查詢本身的的var_dump進行比較提供一個MongoId。另外,請確保您正在運行最新版本的PHP Mongo驅動程序。

0

由於PHP是弱類型,以確保你施放的所有輸入值和搜索值與預期和一致的數據類型,否則肯定不會找到想要的文檔是最重要的。

雖然使用PHP中的MongoDB我使它成爲一個點,以避免任何可能的混淆或錯誤故意施放的一切。

此外,在groups.google.com MongoDB的用戶羣是非常好的,反應,所以如果你是不是已經利用該資源我肯定會考慮加入它。

相關問題