sql >> Base de Datos >  >> NoSQL >> MongoDB

Mongo-PHP:excepción de MongoCursor con MongoDB PHP Driver v1.6

Esto puede estar relacionado con un error que se introdujo en 1.6.0 con respecto a la iteración con hasNext() y getNext() :PHP-1382 . Desde entonces, se ha fusionado una solución con v1.6 rama y debe ser lanzado a finales de esta semana como 1.6.1.

Dicho esto, el error relacionado con hasNext() fue en realidad que el último documento en el conjunto de resultados se perdería durante la iteración. Si ejecuto su script original contra 1.6.0, la matriz contiene un null valor como su último elemento. Con la corrección en su lugar, la matriz contendrá todos los documentos como se esperaba. No puedo reproducir la excepción que está viendo con ninguna de las versiones.

Esa excepción en realidad se produce a partir de comprobaciones internas en las estructuras de datos C, para garantizar que el objeto del cursor esté correctamente asociado con un MongoClient y una conexión de socket. Ver el MONGO_CHECK_INITIALIZED() llamadas macro en este archivo . La mayoría de los métodos de cursor comprueban que un MongoClient está asociado, pero hasNext() es único en el sentido de que también verifica el objeto de socket (creo que otros métodos simplemente asumen que un cursor con un MongoClient también tiene un socket). Si esa excepción es realmente reproducible para usted y está dispuesto a realizar una depuración con la extensión, me interesaría mucho saber cuál de las dos comprobaciones arroja el error.

Como nota al margen, también debe especificar el "replicaSet" opción al construir MongoClient. Debe tener el nombre del conjunto de réplicas, lo que garantiza que el controlador pueda ignorar correctamente las conexiones a los hosts que no son miembros del conjunto de réplicas deseado.