I'm looping a queried mongodb cursor in php to index documents in elastic.
The indexing process breaks as I randomly get following error in the cursor loop:
======================================================================
The application has thrown an exception!
======================================================================
MongoDB\Driver\Exception\UnexpectedValueException
Could not convert BSON document to a PHP variable
----------------------------------------------------------------------
It happens in this line:
foreach ($webpageCursor as $id => $webpage) {...
I'm not even able to output the maybe invalid object, so I don't know which one is causing it.
Is there a way to avoid this problem?
EDIT:
Here the cursor creation code:
/**
* Get webpages
*
* @param string $database The database name
* @param int $limit The limit for the query
* @return \MongoCursor
*/
public function getDocumentsCursor($database, $limit = null)
{
$mongoClient = $this->getMongoDbService()->getMongoDbClient();
$collection = $mongoClient->selectCollection($database, 'documents');
return $collection->find(
[
'text' => [
'$exists' => true
],
'parsed' => [
'$ne' => new \MongoDB\BSON\UTCDateTime(-62135596800000),
],
'fetched' => [
'$ne' => new \MongoDB\BSON\UTCDateTime(-62135596800000),
],
'pointsToCanoncial' => [
'$ne' => true
],
'noIndex' => [
'$ne' => true
],
'lastStatusCode' => [
'$gte' => 200,
'$lt' => 300
]
],
[
'noCursorTimeout' => true,
'projection' => [
'_id' => true,
'meta' => true,
'url' => true,
'text' => true,
'contentType', true,
'header' => true,
'inlinks' => true,
],
'limit' => $limit,
]
);
}