MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Mongo-PHP - exceção MongoCursor com MongoDB PHP Driver v1.6


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.