ThinkPhp5 mongodb 使用自定义objectID出错解决

摘要:
在Tp5中使用mongodb并使用自定义ObjectId时,会报告一个错误:CannotuseobjectoftypeMongoDB BSON ObjectIDasarray。查询源代码并在topthink/hint-mongo/src/Builder中找到PHP发现其原始parseData方法如下:protectedfunctionparseData($data,$options){if(empty($d

在Tp5中使用mongodb 使用自定义ObjectId时报错:Cannot use object of type MongoDB\BSON\ObjectID as array

查询源码发现在topthink/think-mongo/src/Builder.php中发现 它原来的parseData方法这样写的:

    protected function parseData($data, $options)
    {
        if (empty($data)) {
            return[];
        }

        $result =[];
        foreach ($data as $key => $val) {
            $item = $this->parseKey($key);
            if (isset($val[0]) && 'exp' == $val[0]) {
                $result[$item] = $val[1];
            } elseif (is_null($val)) {
                $result[$item] = 'NULL';
            } else{
                $result[$item] = $this->parseValue($val, $key);
            }
        }
        return $result;
    }

这里做下更改就可以了

    protected function parseData($data, $options)
    {
        if (empty($data)) {
            return[];
        }

        $result =[];
        foreach ($data as $key => $val) {
            $item = $this->parseKey($key);
            if (is_object($val)) {
                $result[$item] = $val;
            }elseif (isset($val[0]) && 'exp' == $val[0]) {
                $result[$item] = $val[1];
            } elseif (is_null($val)) {
                $result[$item] = 'NULL';
            } else{
                $result[$item] = $this->parseValue($val, $key);
            }
        }
        return $result;
    }

免责声明:文章转载自《ThinkPhp5 mongodb 使用自定义objectID出错解决》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇浅谈利用SQLite存储离散瓦片的思路和实现方法理解 line-height下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Spring Data MongoDB 四:基本文档改动(update)(一)

Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一) 学习MongoDB 二:MongoDB加入、删除、改动 一.简单介绍Spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的update的操作,能够...

Spring Boot集成mongodb

引自尚硅谷项目-尚医通 一、集成简介 spring-data-mongodb提供了MongoTemplate与MongoRepository两种方式访问mongodb,MongoRepository操作简单,MongoTemplate操作灵活,我们在项目中可以灵活适用这两种方式操作mongodb,MongoRepository的缺点是不够灵活,MongoT...

docker版mongodb4.0同步数据到es7.3.2的简单配置(mongo无安全校验)

          网上目前能查到的mongo同步数据到es的资料最多就是用的mongo-connector,此外还有revier和logstash。全都是比较过时的,不支持高版本的es。目前能查到的只有monstache支持。版本对照参考官网:  https://rwynn.github.io/monstache-site/start/   es7.3....

mongodb 数据库操作--备份 还原 导出 导入

mongodb数据备份和还原主要分为二种,一种是针对于库的mongodump和mongorestore,一种是针对库中表的mongoexport和mongoimport。 一、mongodump备份数据库 1. 常用命令格 mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -o 文件存在路径 如果没有用户,可以去掉...

mac系统下安装、启动、停止mongodb

mongodb是非关系型数据库,mysquel是关系型数据库,前者没有数据表这个说法,后者有 一. 下载nodejs,安装,一直到 node -v显示版本号,表示安装成功。 二. 本文主要讲解,安装包方式安装 mongodb,至于其他方式不做介绍。 下载Mongodb后,将Mongodb-3.2.5.tar.gz 复制到 /leleda002 路径下解压得...

MongoDB优化与一些需要注意的细节

这里总结下这段时间使用mongo的心得,列出了几个需要注意的地方。 1. 系统参数及mongo参数设置  mongo参数主要是storageEngine和directoryperdb,这两个参数一开始不选定后续就无法再更改。 directoryperdb主要是将数据库分文件夹存放,方便后续的备份及数据迁移。 storageEngine(存储引擎)默认使...