Я экспериментирую с 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))
);
Повторная выборка записи показывает, что она остается неизменной.
Я действительно задавался вопросом, работает ли что-то неправильно с _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
. Я уверен, что это очевидно, и мне просто нужна вторая пара глаз.
Большое спасибо.