Edited at

PHP7で新しいMongoDBのドライバを使う

以前、CentOS6 + PHP5.6の環境下で動かしていたPHPでMongoDBをごにょごにょといじくるスクリプトがあったんですが、CentOS7+PHP7で動かすとエラー

そういやドライバ入ってないじゃんと思ってインストールしようとしたのですが微妙に流儀が変わっていたのでメモ

マニュアルにも

MongoDB ドライバ (旧版)

MongoDB driver

とあるとおり今まであったものは旧版扱い


PHPやドライバのインストール

私はPHP関連はremiリポジトリを使っています

PHP7.0の場合はremi-php70というリポジトリを有効にした上でphp-*なモジュールに関してはphp70-を頭につければいいらしい

ひとまずcliとmongodbとマルチバイトだけの最小構成

sudo yum --enablerepo=remi,remi-php70 install php70-php-cli php70-php-mbstring php70-php-pecl-mongodb


環境変数

これでインストールが終わったのですがシェルからphpと打つと

$ php -v

PHP 5.6.xx (cli) (built: xxxx)
Copyright (c) 1997-2016 The PHP Group
Zend Engine vx.x.x, Copyright (c) 1998-2016 Zend Technologies

予め入れてあったphp5.6が有効に・・・

php7を使うには

$ source /opt/remi/php70/enable

として環境変数を設定してあげなきゃいけないらしい

もう7以外使わないという人は.bashrcあたりに書いておくと幸せかも


ライブラリを入れる

チュートリアルを見ると素のPHPで使う場合はこのライブラリを入れてねという風にお勧めされているので素直にしたがってcomposerでインストールしておく


サンプル

ここまでやってしまえばあとは旧版とほぼ同じOneとManyでメソッドが分かれているのがポイント?

<?php

require_once dirname(__FILE__) . '/vendor/autoload.php';

$client = new MongoDB\Client("mongodb://localhost:27017");
$db = $client->selectDatabase('example');
$collection = $db->selectCollection('gochiusa');

$collection->insertOne([ 'name' => '宇治松千夜', 'shop' => '甘兎庵', 'cv' => '佐藤聡美' ]);
$collection->insertOne([ 'name' => '桐間紗路', 'shop' => 'フルール・ド・ラパン', 'cv' => '内田真礼']);
$collection->insertMany([
[ 'name' => '保登心愛', 'shop' => 'ラビットハウス', 'cv' => '佐倉綾音' ],
[ 'name' => '香風智乃', 'shop' => 'ラビットハウス', 'cv' => '水瀬いのり' ],
[ 'name' => '天々座理世', 'shop' => 'ラビットハウス', 'cv' => '種田梨沙' ],
]);

$chiya = $collection->findOne(['name' => '宇治松千夜']);

$rabbithouse = $collection->find(['shop' => 'ラビットハウス']);
foreach($rabbithouse as $rabbit){
print_r($rabbit);
}