Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当我尝试在mongodb上获取数据时,我不得不面对一个错误_Php_Mongodb_Symfony_Doctrine - Fatal编程技术网

Php 当我尝试在mongodb上获取数据时,我不得不面对一个错误

Php 当我尝试在mongodb上获取数据时,我不得不面对一个错误,php,mongodb,symfony,doctrine,Php,Mongodb,Symfony,Doctrine,我有很多这样的统计数据: 当我在控制器中获取此数据时,我面临此错误: Could not convert array to a date value 堆栈跟踪: Stack Trace in vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Types/DateType.php at line 67 - } if ($datetime === false) { thr

我有很多这样的统计数据:

当我在控制器中获取此数据时,我面临此错误:

Could not convert array to a date value 
堆栈跟踪:

    Stack Trace
in vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Types/DateType.php at line 67   -
        }
        if ($datetime === false) {
            throw new \InvalidArgumentException(sprintf('Could not convert %s to a date value', is_scalar($value) ? '"'.$value.'"' : gettype($value)), 0, $exception);
        }
        return $datetime;
at DateType ::getDateTime (array('date' => '2014-07-16 13:39:01.000000', 'timezone_type' => '3', 'timezone' => 'Europe/Istanbul')) 
in app/cache/dev/doctrine/odm/mongodb/Hydrators/OjsAnalyticsBundleDocumentObjectViewsHydrator.php at line 81   +
at OjsAnalyticsBundleDocumentObjectViewsHydrator ->hydrate (object(ObjectViews), array('_id' => object(MongoId), 'entity' => 'article', 'objectId' => '116597', 'logDate' => array('date' => '2014-07-16 13:39:01.000000', 'timezone_type' => '3', 'timezone' => 'Europe/Istanbul')), array()) 
in vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Hydrator/HydratorFactory.php at line 453   +
at HydratorFactory ->hydrate (object(ObjectViews), array('_id' => object(MongoId), 'entity' => 'article', 'objectId' => '116597', 'logDate' => array('date' => '2014-07-16 13:39:01.000000', 'timezone_type' => '3', 'timezone' => 'Europe/Istanbul')), array()) 
in vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/UnitOfWork.php at line 2843   +
at UnitOfWork ->getOrCreateDocument ('Ojs\AnalyticsBundle\Document\ObjectViews', array('_id' => object(MongoId), 'entity' => 'article', 'objectId' => '116597', 'logDate' => array('date' => '2014-07-16 13:39:01.000000', 'timezone_type' => '3', 'timezone' => 'Europe/Istanbul')), array()) 
in vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Cursor.php at line 224   +
at Cursor ->current ()
at iterator_to_array (object(Cursor), false) 
in vendor/doctrine/mongodb/lib/Doctrine/MongoDB/Cursor.php at line 628   +
at Cursor ->Doctrine\MongoDB\{closure} () 
in vendor/doctrine/mongodb/lib/Doctrine/MongoDB/Cursor.php at line 660   +
at Cursor ->retry (object(Closure), true) 
in vendor/doctrine/mongodb/lib/Doctrine/MongoDB/Cursor.php at line 629   +
at Cursor ->toArray (false) 
in vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/DocumentRepository.php at line 173   +
at DocumentRepository ->findBy (array('entity' => 'article', 'objectId' => '116597')) 
in src/Ojs/Common/Services/JournalService.php at line 338   +
at JournalService ->getArticleStats ('116597', object(Journal)) 
in src/Ojs/ReportBundle/Controller/AnalyticsReportController.php at line 66   +
at AnalyticsReportController ->detailAction ('116597')
at call_user_func_array (array(object(AnalyticsReportController), 'detailAction'), array('116597')) 
in app/bootstrap.php.cache at line 3094   +
at HttpKernel ->handleRaw (object(Request), '1') 
in app/bootstrap.php.cache at line 3056   +
at HttpKernel ->handle (object(Request), '1', true) 
in app/bootstrap.php.cache at line 3207   +
at ContainerAwareHttpKernel ->handle (object(Request), '1', true) 
in app/bootstrap.php.cache at line 2429   +
at Kernel ->handle (object(Request)) 
in web/app_dev.php at line 31   +
MongoDB映射文件中的相关字段映射:

 /**
     * @MongoDB\Date
     */
    public $logDate;
/**
     * Get logDate
     *
     * @return @MongoDb\Date $logDate
     */
    public function getLogDate()
    {
        return $this->logDate;
    }

    /**
     * Set logDate
     *
     * @param  $logDate
     * @return self
     */
    public function setLogDate($logDate)
    {
        $this->logDate = $logDate;

        return $this;
    }
首先,我要问两个问题

  • 为什么mongodb将日期数据存储为对象/数组
  • 我怎么才能修好这该死的东西

感谢大家的关注。

logDate
是一个数组,因为它包含以下属性
date
timezone\u type
timezone
。不知道MongoDB为什么这么做,我从来没有真正使用过它,所以我对这个问题没有答案。但是,如果您想处理时区信息,您可以将日期格式化为ISO8601并存储,然后交叉引用给定时区作为时区的实际名称


要解决
logDate
问题,您可以将其用作数组,例如
logDate['date']
以获取实际日期时间。

它与原理相关,mongodb数据映射过程。