参考URL
ドキュメント
https://docs.mongodb.com/manual/introduction/
CentOS7 に MongoDB を導入する方法
https://qiita.com/tomy0610/items/f540150ac8acaa47ff66
【MongoDB】認証の設定をする
https://it-blue-collar-dairy.com/add_auth_to_mongodb/
いいからやる。CentOS7 + PHP7 + mongoDB
https://qiita.com/ayayan-z/items/0e8157f6a7cdb5842105
やってみようNoSQL MongoDBを最速で理解する
https://qiita.com/Brutus/items/8a67a4db0fdc5a33d549
インストール
vi /etc/yum.repos.d/mongodb-org-4.0.repo
[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
yum install mongodb-org
mongod -version
systemctl start mongod
デフォルトの起動ポートは 27017 番
管理ユーザ作成
デフォルトでは、MongoDBにはユーザが必要ない。つまり認証が無い。
設定で有効にする。
# MongoDBに入る
mongo
# adminデータベースに接続する。adminデータベースはインストール時に作成されている。
> use admin
# 管理ユーザを登録
> db.createUser({user:"admin", pwd:"パスワード", roles:[{role:"root", db:"admin"}]})
# ユーザの存在確認
> db.getUsers()
# もしくは以下でもユーザ確認できる (パスワードはハッシュ化されているので文字列になっている)
> db.system.users.find()
権限
https://docs.mongodb.com/manual/reference/built-in-roles/
いろいろある
認証有効化
vi /etc/mongod.conf
security:
authorization: enabled
systemctl restart mongod
* この際に起動に失敗する場合がある。その場合は、
less /var/log/mongodb/mongod.log
Failed to unlink socket file /tmp/mongodb-27017.sock Operation not permitted
とあるので、
rm /tmp/mongodb-27017.sock
でOK
認証確認
mongo
> use admin
> db.getUsers()
2019-08-08T18:01:03.291+0900 E QUERY [js] Error: command usersInfo requires authentication :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.getUsers@src/mongo/shell/db.js:1763:1
@(shell):1:1
# ログイン
> db.auth("admin", "パスワード")
1
> db.getUsers()
表示される
ユーザ作成
mongo
# 管理者でログイン
> use admin
> db.auth("admin", "パスワード")
# 先にどのデータベースを使用するか指定する
# useと言いながらcreateも兼ねている感じ
> use test_database
> db.createUser({user:"test_user", pwd:"test_user", roles:[{role:"readWrite", db:"test_database"}]})
> db.getUsers()
[
{
"_id" : "test_database.test_user",
"userId" : UUID("75db633e-20b3-41b9-9f38-f2c2374d264b"),
"user" : "test_user",
"db" : "test_database",
"roles" : [
{
"role" : "readWrite",
"db" : "test_database"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
]
データベース操作
mongo
> use test_database
> db.auth("test_user", "test_user")
# コレクション(テーブルのこと)作成
> db.createCollection('test');
# コレクションにドキュメント(データのこと)を追加する
> db.test.insert( { name:'tanaka', address:'tokyo' } );
# 確認
> show dbs
> show collections
> db.test.find();
PHPからmongoDBを使えるようにする
yum --enablerepo=epel,remi,remi-php71 install php71-php-pecl-mongodb
vi /etc/php.ini
# 最下段にでも追加
extension=/opt/remi/php71/root/usr/lib64/php/modules/mongodb.so
systemctl restart httpd
# php-fpmの場合
systemctl restart php-fpm
phpinfo()にmongodbの情報が表示されていればOK
php -i | grep mongo
サンプルプログラムで動作確認
<?php
// DB接続 認証+データベース指定
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017/test_database", ['username' => 'test_user', 'password' => $pass]);
// Insert
$bulk = new MongoDB\Driver\BulkWrite;
$bulk->insert(['name' => '山田', 'address' => '東京']);
$manager->executeBulkWrite('test_database.test', $bulk);
// Select
//$filter = ['address' => ['$gt' => 'tokyo']]; // where句
$filter = [];
$options = [
'projection' => ['_id' => 0],
'sort' => ['_id' => -1],
];
$query = new MongoDB\Driver\Query($filter, $options);
$cursor = $manager->executeQuery('test_database.test', $query);
// Select 結果表示
foreach ($cursor as $document) {
var_dump($document);
}
動けばOK