Dit kan te maken hebben met een bug die is geïntroduceerd in 1.6.0 met betrekking tot iteratie met hasNext()
en getNext()
:PHP-1382
. Sindsdien is er een oplossing toegevoegd aan de v1.6
tak
en zou later deze week uitkomen als 1.6.1.
Dat gezegd hebbende, de bug met betrekking tot hasNext()
was eigenlijk dat het laatste document in de resultatenset zou worden gemist tijdens het itereren. Als ik je originele script tegen 1.6.0 uitvoer, bevat de array een null
waarde als het laatste element. Als de fix op zijn plaats is, bevat de array alle documenten zoals verwacht. Ik kan de uitzondering die je bij beide versies ziet niet reproduceren.
Die uitzondering wordt feitelijk veroorzaakt door een interne controle van de C-gegevensstructuren, om ervoor te zorgen dat het cursorobject correct is gekoppeld aan een MongoClient- en socketverbinding. Zie de MONGO_CHECK_INITIALIZED()
macro-aanroepen in dit bestand
. De meeste cursormethoden controleren of een MongoClient is gekoppeld, maar hasNext()
is uniek omdat het ook controleert op het socketobject (ik geloof dat andere methoden er gewoon van uitgaan dat een cursor met een MongoClient ook een socket heeft). Als die uitzondering echt reproduceerbaar voor je is en je bereid bent om wat debuggen met de extensie te doen, zou ik erg geïnteresseerd zijn om te weten welke van de twee controles de fout veroorzaakt.
Als kanttekening moet u ook de "replicaSet"
. specificeren optie bij het bouwen van MongoClient. Dit moet de naam van de replicaset hebben, die ervoor zorgt dat het stuurprogramma verbindingen met hosts die geen lid zijn van de beoogde replicaset correct kan negeren.