2012-03-13 38 views
0
{ 
"_id": ObjectId("4f5596973c9059fc05000000"), 
"array_to_be_used": { 
"0": "4f548df23c9059f406000024", 
"1": "4f548df23c9059f406000032", 
"2": "4f548df23c9059f406000004", 
"3": "4f548df23c9059f406000035" 
} 

} 

$id ='4f5596973c9059fc05000000'; 
$collection->update(array('_id' => new MongoId($id)),array('$unset' => array('array_to_be_used.$'=>'4f548df23c9059f406000004')) ); 

假設我想不知道它的數字索引中刪除「4f548df23c9059f406000004」,所以我用上面提到的代碼,但不工作。請幫助我。

回答

0

您應該使用$pull修飾符。

MongoDB documention about $pull

+0

我用** $ **拉。但它也沒有解決問題。如果我直接使用索引號而不是'$',即'array('array_to_be_used.2'=>'4f548df23c9059f406000004')',那麼它將刪除該元素。 – Sanjay 2012-03-13 14:39:45

1

陣地運算符是用於數組,而不是對象。因爲你的數據是一個對象而不是一個數組(從數組鍵中看來它是一個錯誤),你的「最佳」選項可能是讀取對象,確定鍵並取消設置。

$id ='4f5596973c9059fc05000000'; 
$row = $collection->findOne(array('_id' => new MongoId($id))); 
$i = array_search('4f548df23c9059f406000004', $row['array_to_be_used']); 
if ($i !== false) { 
    $collection->update(
     array('_id' => new MongoId($id)), 
     array('$unset' => array('array_to_be_used.' . $i => true)) 
    ); 
}