оператор положения $ mongodb не работает в php - PullRequest
0 голосов
/ 13 марта 2012
{
"_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', не зная его числового индекса, поэтому я использую вышеупомянутый код, но не работаю. Пожалуйста, помогите мне.

Ответы [ 2 ]

1 голос
/ 13 марта 2012

Позиционные операторы предназначены для массивов, а не объектов.

Поскольку ваши данные являются объектом, а не массивом (который из ключей массива выглядит как ошибка), ваш «лучший» вариант, вероятно,прочитайте объект, определите ключ и отмените его.

т.е.

$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))
    );
}
0 голосов
/ 13 марта 2012

Вы должны использовать модификатор $pull.

Документация MongoDB о $ pull

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...