MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongo-PHP - Eccezione MongoCursor con MongoDB PHP Driver v1.6

Questo potrebbe essere correlato a un bug introdotto nella 1.6.0 per quanto riguarda l'iterazione con hasNext() e getNext() :PHP-1382 . Da allora è stata unita una correzione a v1.6 filiale e dovrebbe essere rilasciato entro questa settimana come 1.6.1.

Detto questo, il bug relativo a hasNext() era in realtà che l'ultimo documento nel set di risultati sarebbe stato perso durante l'iterazione. Se eseguo il tuo script originale su 1.6.0, l'array contiene un null valore come ultimo elemento. Con la correzione in atto, l'array conterrà tutti i documenti come previsto. Non riesco a riprodurre l'eccezione che vedi con nessuna delle due versioni.

Tale eccezione viene effettivamente generata da un controllo interno delle strutture dati C, per garantire che l'oggetto cursore sia correttamente associato a una connessione MongoClient e socket. Vedi il MONGO_CHECK_INITIALIZED() chiamate macro in questo file . Quasi tutti i metodi del cursore controllano che un MongoClient sia associato, ma hasNext() è unico in quanto controlla anche l'oggetto socket (credo che altri metodi presuppongano semplicemente che un cursore con un MongoClient abbia anche un socket). Se quell'eccezione è veramente riproducibile per te e sei disposto a eseguire un po' di debug con l'estensione, sarei molto interessato a sapere quale dei due controlli sta generando l'errore.

Come nota a margine, dovresti anche specificare il "replicaSet" opzione durante la costruzione di MongoClient. Questo dovrebbe avere il nome del set di repliche, che garantisce che il driver possa ignorare correttamente le connessioni agli host che non sono membri del set di repliche previsto.