MongoDB memo
mongoDBについて
公式ドキュメント
MongoDB PHP Library — PHP Library Manual 1.4
概要
やってみようNoSQL MongoDBを最速で理解する - Qiita
環境
CentOS Linux release 7.6.1810 (Core) PHP Version 7.2.11 MongoDB shell version v3.6.10 git version: 3e3ab85bfb98875af3bc6e74eeb945b0719f69c8 OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013 allocator: tcmalloc modules: none build environment: distmod: rhel70 distarch: x86_64 target_arch: x86_64
PHPから使う
composerコマンドが使えない場合はcomposerをインストールする
CentOS7にComposerをインストールする
https://qiita.com/inakadegaebal/items/d370bcb1627fce2b5cd1MongoDB PHP Libraryのインストール
https://docs.mongodb.com/php-library/master/tutorial/install-php-library/下記を共通ファイル冒頭に記述。MongoDB PHP Libraryが使えるように。
require_once __DIR__ . "/vendor/autoload.php";
日付の扱い
下記、
「Z」はUTCであることを示す。
「T」は日付と時間を分けるための記号。
ISODate("2016-10-21T15:00:00Z")
コード例
Mongo DBに接続
- 接続情報設定
$user = "ユーザーID"; $pwd = "パスワード"; $host = "localhost"; $port = ポート番号; $db = "DB名";
クライアントに接続
$client = new MongoDB\Client("mongodb://${user}:${pwd}@${host}:${port}/${db}");
コレクションを指定
$collection = $client -> DB名 -> コレクション名;
例) $collection = $client -> seisansei_db_dev -> userMaster;
コレクションから情報取得
- 全件
$result = $collection -> find();
- 絞り込み(下記例は、ユーザーIDを指定)
$result = $collection -> find(['userId' => 'test01']);
取得データを展開(下記例は、ユーザー名を指定)
foreach ($result as $value) { $userName = $value['userName']; }
データ追加
- 1件のみ
$result = $collection->insertOne([ 'userId' => $userid, 'mode' => $mode, 'answerDate' => $answerDate, 'seatId' => $seatId, 'score' => $score, 'opinion' => $opinion , ]);
- 複数
$result = $collection->insertMany( [ 'userId' => '001', 'mode' => 'mode01', ], [ 'userId' => '002', 'mode' => 'mode02', ]);
追加するデータは変数で管理すると楽。
array_pushをforeach内で実行するなどして作成。
$documents = []; array_push($documents, [ 'userId' => '002', 'mode' => 'mode02', ]); $result = $collection->insertMany($documents);
データ更新
注意事項 -- https://ota42y.com/blog/2015/12/02/mongodb_update/ -- MongoDB の update はレコードのID以外の要素を全て置き換える -- 指定したカラムだけ置き換えてはくれない -- 部分 update したい場合は、$setでを使う
指定したデータの一部だけ更新
-- 1件(更新のみ)
$result = $collection->updateOne( [ 'userId' => $_SESSION['userid'] ], [ '$set' => [ 'mailAddr' => $mailAddr ]] );
-- 1件(更新後、そのデータを取得)
$updateResult = $collection->findOneAndUpdate( [ 'userId' => $user_id ], [ '$set' => [ 'sheetAssignmentLog.0.beginDate' => $utc_seatAssignDate ] ] );
- 配列要素の指定 例)下記のような構造の場合は「.」で区切って指定
年を指定:datatime.0.year 月を指定:datatime.0.month
"datatime" : [ 0:[ "year" : 2019, "month" : 4, "day" : 10 ], 1:[ "year" : 2019, "month" : 5, "day" : 20 ] ]
データ削除
-1件削除
$result = $collection->deleteOne(['userId' => '001']);
-複数件削除
$result = $collection->deleteMany(['userId' => '001']);