Sto sperimentando con MongoDB utilizzando l'estensione PECL PHP, tuttavia ho difficoltà a far funzionare una determinata query di aggiornamento. Ho cercato in giro su SO per le risposte con poca fortuna.
ho creato una collezione di base:
$m = new Mongo;
$collection = $m->testdb->testcollection;
$collection->insert(array(
0, 1, 1, 2, 3, 5
));
Utilizzando findOne
e var_dump
il record viene visualizzato come segue:
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
Il problema nasce quando voglio aggiornare utilizzando $set
. Sto basando la mia domanda sulla mappatura mostrato verso la parte inferiore del SQL to Mongo Cheat Sheet nel manuale PHP
Qui voglio aggiornare campo 0
a valorizzare 100
$obj = $collection->findOne();
$collection->update(
array('_id' => $obj['_id']),
array('$set' => array(0 => 100))
);
Re-recupero il record dimostra che resti invariato.
mi sono chiesto se stavo facendo qualcosa di sbagliato con il _id
, tuttavia la seguente query di aggiornamento fa lavoro, sia pure di sostituire l'intero record con un nuovo valore, non semplicemente aggiornando quello campo.
$collection->update(
array('_id' => $obj['_id']),
array(0 => 100)
);
discarica Oggetto:
array
'_id' =>
object(MongoId)[7]
public '$id' => string '4f3bde65a1f7a0315b000000' (length=24)
0 => int 100
Qualcuno può sottolineare quello che sto facendo male, e come usare correttamente $set
. Sono sicuro che sia ovvio e ho solo bisogno di un secondo paio di occhi su di esso.
Molte grazie.
fa questo lavoro: 'array ('$ set' => array (1 => 100))'? –
@yi_H: Questo ** funziona **. Il campo '1' è aggiornato, perché non funziona per il campo' 0'? – Leigh