0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MongoDB導入

Posted at

参考URL

公式
https://www.mongodb.com/

ドキュメント
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

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?