Detta kan vara relaterat till en bugg som introducerades i 1.6.0 angående iteration med hasNext()
och getNext()
:PHP-1382
. En fix har sedan slagits samman med v1.6 filial
och bör släppas senare i veckan som 1.6.1.
Som sagt, buggen angående hasNext()
var faktiskt att det sista dokumentet i resultatuppsättningen skulle missas under iterationen. Om jag kör ditt ursprungliga skript mot 1.6.0, innehåller arrayen en null
värde som dess sista element. Med fixen på plats kommer arrayen att innehålla alla dokument som förväntat. Jag kan inte återskapa undantaget du ser med någon av versionerna.
Det undantaget slängs faktiskt från en intern kontroll av C-datastrukturerna, för att säkerställa att markörobjektet är korrekt associerat med en MongoClient och socketanslutning. Se MONGO_CHECK_INITIALIZED()
makroanrop i denna fil
. De flesta markörmetoderna kontrollerar att en MongoClient är associerad, men hasNext()
är unik genom att den också söker efter socket-objektet (jag tror att andra metoder bara antar att en markör med en MongoClient också har en socket). Om det undantaget verkligen är reproducerbart för dig och du är villig att göra lite felsökning med tillägget, skulle jag vara mycket intresserad av att veta vilken av de två kontrollerna som orsakar felet.
Som en sidoanteckning bör du också ange "replicaSet"
alternativet när du bygger MongoClient. Detta bör ha replikuppsättningens namn, vilket säkerställer att drivrutinen korrekt kan ignorera anslutningar till värdar som inte är medlem i den avsedda replikuppsättningen.