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

я использовал ** $ тянуть **. но оно также не разрешило проблему. Если я напрямую использую номер индекса вместо '$' i.e. '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)) 
    ); 
} 
Смежные вопросы