我正在使用以下内容:PHP 7.2 MongoDB 3.4 Pecl 1.5.2
我正在研究一个Laravel项目。它使用MongoDB作为数据库。我有很少的集合,我必须使用Laravel迁移创建Mongo Views。我想知道是否可以使用PHP创建Mongodb Views。目前我有一个解决方法。我创建了一个JavaScript文件,其中包含MongoDB db.createView()查询。它还将视图名称和集合名称作为参数。以下是我的工作。 $ db具有数据库名称,$ view具有视图名称,$ collection具有集合名称,$ script具有JavaScript文件的路径。这段代码我是在迁移类的up()方法中编写的。
$cmd = "mongo $db --eval \"var view='$view', collection='$collection'\" $script";
exec($cmd);
在我的Javascript文件中,我有类似下面的代码
db.createView(view, collection, <aggregate query>);
所以每个人都可以看到,我正在运行来自PHP的终端命令来制作视图。那么在mongo库中是否有任何PHP函数来制作mongo视图?
你可以使用这个库mongoPhpLibrary
这将使您的工作变得轻松
如果你在Laravel中使用mongo,我会假设你正在使用jenssegers/mongodb
将它与Eloquent一起使用。
因此,假设您已将mongo数据库设置为'mongodb'
数据库连接。您需要MongoDB\Database
作为您的数据库。您可以通过以下方式获得:
$mongo = app('db')->connection('mongodb')->getMongoDB();
当然,如果你不使用jenssegers/mongodb
,你仍然可以用mongodb/mongodb
做同样的事情。
$mongo = (new MongoDB\Client)->selectDatabase($db);
这有一个名为command
的方法(参见https://docs.mongodb.com/php-library/current/reference/method/MongoDBDatabase-command/),它对应于来自mongo cli的db.runCommand
方法。 db.createView
称这种方法(见https://docs.mongodb.com/manual/reference/method/db.createView/#db.createView)
所以,你可以使用$mongo->command
来创建这样的视图:
$mongo->command([
'create' => $view,
'viewOn' => $collection,
'pipeline' => $aggregateQuery,
'collation' => ['locale' => 'en'],
]);