Cela peut être lié à un bogue qui a été introduit dans 1.6.0 concernant l'itération avec hasNext()
et getNext()
:PHP-1382
. Un correctif a depuis été fusionné avec la v1.6
succursale
et devrait être publié plus tard cette semaine en tant que 1.6.1.
Cela dit, le bogue concernant hasNext()
était en fait que le dernier document du jeu de résultats serait manqué lors de l'itération. Si j'exécute votre script d'origine contre 1.6.0, le tableau contient un null
valeur comme son dernier élément. Avec le correctif en place, le tableau contiendra tous les documents comme prévu. Je ne peux pas reproduire l'exception que vous voyez avec l'une ou l'autre version.
Cette exception est en fait levée à partir d'un contrôle interne sur les structures de données C, pour s'assurer que l'objet curseur est correctement associé à une connexion MongoClient et socket. Voir le MONGO_CHECK_INITIALIZED()
appels de macro dans ce fichier
. La plupart des méthodes de curseur vérifient qu'un MongoClient est associé, mais hasNext()
est unique en ce qu'il vérifie également l'objet socket (je crois que d'autres méthodes supposent simplement qu'un curseur avec un MongoClient a également un socket). Si cette exception est vraiment reproductible pour vous et que vous souhaitez effectuer un débogage avec l'extension, je serais très intéressé de savoir laquelle des deux vérifications génère l'erreur.
En remarque, vous devriez également spécifier le "replicaSet"
option lors de la construction de MongoClient. Cela devrait avoir le nom du jeu de répliques, ce qui garantit que le pilote peut correctement ignorer les connexions aux hôtes qui ne sont pas membres du jeu de répliques prévu.