sql >> Databáze >  >> NoSQL >> MongoDB

Mongo-PHP - Výjimka MongoCursor s ovladačem MongoDB PHP Driver v1.6

To může souviset s chybou, která byla zavedena ve verzi 1.6.0 ohledně iterace pomocí hasNext() a getNext() :PHP-1382 . Oprava byla od té doby začleněna do v1.6 větev a měla by být vydána koncem tohoto týdne jako 1.6.1.

To znamená, že chyba týkající se hasNext() ve skutečnosti bylo, že poslední dokument ve výsledné sadě bude při iteraci vynechán. Pokud spustím váš původní skript proti verzi 1.6.0, pole obsahuje null hodnotu jako její poslední prvek. S opravou bude pole obsahovat všechny dokumenty podle očekávání. Nemohu reprodukovat výjimku, kterou vidíte u žádné verze.

Tato výjimka je ve skutečnosti vyvolána z interních kontrol datových struktur C, aby se zajistilo, že objekt kurzoru je správně přidružen k připojení MongoClient a soketu. Viz MONGO_CHECK_INITIALIZED() volání maker v tomto souboru . Většina metod kurzoru kontroluje, zda je MongoClient přidružen, ale hasNext() je unikátní v tom, že také kontroluje objekt socket (věřím, že jiné metody pouze předpokládají, že kurzor s MongoClientem má také socket). Pokud je pro vás tato výjimka skutečně reprodukovatelná a jste ochotni provést nějaké ladění s rozšířením, velmi by mě zajímalo, která z těchto dvou kontrol způsobuje chybu.

Jako vedlejší poznámku byste měli také zadat "replicaSet" možnost při konstrukci MongoClient. To by mělo mít název sady replik, který zajišťuje, že ovladač může správně ignorovat připojení k hostitelům, kteří nejsou členy zamýšlené sady replik.



  1. Redis tcp-backlog

  2. čtení dat z konkrétních uzlů v sadě replik mongo

  3. Obsluha odpojení/znovu připojení MongoDB z Node

  4. Meteor – chyba MongoDB:Nelze použít modifikátor $addToSet na non-array