Isso pode estar relacionado a um bug que foi introduzido na versão 1.6.0 em relação à iteração com
hasNext()
e getNext()
:PHP-1382
. Desde então, uma correção foi mesclada ao v1.6 filial
e deve ser lançado ainda esta semana como 1.6.1. Dito isso, o bug relacionado a
hasNext()
era na verdade que o último documento no conjunto de resultados seria perdido durante a iteração. Se eu executar seu script original em 1.6.0, o array conterá um null
value como seu último elemento. Com a correção em vigor, a matriz conterá todos os documentos conforme o esperado. Não consigo reproduzir a exceção que você está vendo em nenhuma das versões. Essa exceção é realmente lançada a partir de verificações internas nas estruturas de dados C, para garantir que o objeto cursor esteja associado corretamente a um MongoClient e a uma conexão de soquete. Veja o
MONGO_CHECK_INITIALIZED()
chamadas de macro em neste arquivo
. A maioria dos métodos de cursor verifica se um MongoClient está associado, mas hasNext()
é único, pois também verifica o objeto de soquete (acredito que outros métodos apenas assumem que um cursor com um MongoClient também tem um soquete). Se essa exceção for realmente reproduzível para você e você estiver disposto a fazer alguma depuração com a extensão, eu estaria muito interessado em saber qual das duas verificações está gerando o erro. Como uma observação lateral, você também deve especificar o
"replicaSet"
opção ao construir MongoClient. Isso deve ter o nome do conjunto de réplicas, o que garante que o driver possa ignorar corretamente as conexões com hosts que não são membros do conjunto de réplicas pretendido.