Eksperymentuję z MongoDB przy użyciu rozszerzenia PHP PECL, ale mam problem z uzyskaniem określonego zapytania aktualizacji. Szukałem na SO odpowiedzi na pytania przy odrobinie szczęścia.
Stworzyłem podstawową kolekcję:
$m = new Mongo;
$collection = $m->testdb->testcollection;
$collection->insert(array(
0, 1, 1, 2, 3, 5
));
Korzystanie findOne
i var_dump
zapis wygląda następująco:
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
Problem pojawia się, gdy chcę zaktualizować przy użyciu $set
. Ja opierając moje zapytanie na mapowaniu pokazanym kierunku dna SQL to Mongo Cheat Sheet w podręczniku PHP
Tutaj chcę zaktualizować pole 0
cenić 100
$obj = $collection->findOne();
$collection->update(
array('_id' => $obj['_id']),
array('$set' => array(0 => 100))
);
Ponowne pobieranie rekord pokazuje, że szczątki niezmienione.
zrobiłem zastanawiać, czy robię coś źle z _id
, jednak następującą kwerendę aktualizującą robi pracę, aczkolwiek zastępując cały rekord z nową wartość, a nie po prostu aktualizowanie jednego pola.
$collection->update(
array('_id' => $obj['_id']),
array(0 => 100)
);
obiektu nora:
array
'_id' =>
object(MongoId)[7]
public '$id' => string '4f3bde65a1f7a0315b000000' (length=24)
0 => int 100
Czy ktoś mógłby wskazać co robię źle i jak prawidłowo używać $set
. Jestem pewien, że to oczywiste i potrzebuję tylko drugiej pary oczu.
Wielkie dzięki.
to działa: 'array ('$ zestaw' => array (1 => 100))'? –
@yi_H: To ** działa **. Pole '1' jest zaktualizowane, dlaczego nie działa dla pola' 0'? – Leigh