2012-03-13 12 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

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)) 
    ); 
}