项目使用mongoDB,于是去最大的同性交友网站找了star最多的jenssegers/laravel-mongodb包。安装1.根据README,找到本地laravel对应的package版本2.在开发环境中使用composerrequire导入3.配置config/app.php/**mongoDB*/Jenssegers\Mongodb\MongodbServiceProvider::class,4.Database.php配置"mongodb"=>["driver"=>"mongodb","host"=>"127.0.0.1","port"=>27017,"database"=>"data","username"=>"test","password"=>"test",],注:如果项目不涉及mysql,那么可以直接将上面默认的数据引擎改成mongodb,env方法的描述就不细说了详细'default'=>env('DB_CONNECTION','mysql'),5.代码中使用//获取数据$mongo=\DB::connection("mongodb")->collection($collection)//->where("****","***")->first();问题1.Unsupporteddriver[mongodb]tip1检查phpinfo是否包含mongoDB扩展,如果没有mongoDB扩展,请自行安装再试tip2关键点!请务必检查laravel日志文件。我查了一下mongoDb扩展,还是不支持。查看日志:Typeerror:Argument3passedtoMongoDB\Driver\Server::executeQuery()必须是MongoDB\Driver\ReadPreference的实例或null,给定数组{"exception":"[object](Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code:0)):Typeerror:传递给MongoDB\\Driver\\Server::executeQuery()的参数3必须是MongoDB\\Driver\\ReadPreference的实例或null,数组在F:\\project\\interface_center_jtl\\vendor\\mongodb\\mongodb\\src\\Operation\\Find.php:299)到具体位置,通过这里修改return,再次打印,发现get/first方法可以正常使用insert方法一样,不过是修改同目录下的InsertMany!!从源头上解决这个问题的正确方法是查看phpinfo,将mongo扩展升级到最新的稳定版!具体可以参考我之前的文章centos源码在php7以上安装mongodb扩展。如果是windows,直接下载dll文件即可。2.认证失败。测试native方法,如果native方法可以connect而package方法不能,则考虑package的问题//%40是@符号的转义$manager=new\MongoDB\Driver\Manager("mongodb://mongo:用户:passwd%40abcdef@127.0.0.1:27017");$query=new\MongoDB\Driver\Query([]);$cursor=$manager->executeQuery('test.test',$query);dd($游标);如上,发现还是连接不上,于是考虑mongo的问题,再次测试,同事修改写法后发现可以连接成功!如下:$manager=new\MongoDB\Driver\Manager("mongodb://mongo:user:passwd%40abcdef@127.0.0.1:27017/data");·在这种情况下,我对比了mongoDB的版本,发现该测试环境实际上是一个旧版本。./手动出血与运维测试沟通后,为了保持线上版本的稳定性和敏捷开发的机动性,决定做代码兼容。再次打开包中的源码,发现如下细节(敲黑板:注意路径,此时在jenssegers包中)。知道了原理后,我在配置文件中做了如下修改:至此,add,commit,push,收工!
