Я экспериментирую с MongoDB с использованием расширения PHP PECL, однако мне трудно получить определенный запрос на обновление. Я искал вокруг на SO для ответов с небольшой удачей.
Я создал базовый набор:
$m = new Mongo;
$collection = $m->testdb->testcollection;
$collection->insert(array(
0, 1, 1, 2, 3, 5
));
Использование findOne
и var_dump
запись выглядит следующим образом:
array
'_id' =>
object(MongoId)[6]
public '$id' => string '4f3bde65a1f7a0315b000000' (length=24)
0 => int 0
1 => int 1
2 => int 1
3 => int 2
4 => int 3
5 => int 5
Проблема возникает, когда я хочу, чтобы обновить с помощью $set
. Я основывая свой запрос на отображение, показанного в направлении нижней части SQL to Mongo Cheat Sheet в PHP инструкции
Здесь я хочу обновить поле 0
дорожить 100
$obj = $collection->findOne();
$collection->update(
array('_id' => $obj['_id']),
array('$set' => array(0 => 100))
);
Re сгрузить запись показывает, что остатки без изменений.
я интересно, если я делаю что-то неправильно с _id
, однако следующий запрос обновления делает работу, хотя и заменить всю запись с новым значением, а не просто обновление одного поля.
$collection->update(
array('_id' => $obj['_id']),
array(0 => 100)
);
Объект свалка:
array
'_id' =>
object(MongoId)[7]
public '$id' => string '4f3bde65a1f7a0315b000000' (length=24)
0 => int 100
Может кто-то пожалуйста, указать на то, что я делаю не так, и как правильно использовать $set
. Я уверен, что это очевидно, и мне просто нужна вторая пара глаз.
Большое спасибо.
делает эту работу: 'массив ('$ набор' => массив (1 => 100))'? –
@yi_H: Это ** делает ** произведение. Поле '1' обновляется, почему он не работает для поля' 0'? – Leigh