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

先ほど作ったcollectionにアクセスしたいと思います。

$m = new Mongo();
$db = $m0>selectDB("app");
$col = $db->selectCollection("na007");
$doc = $col->find();
var_dump($doc);

おっと
192.168.33.1:49742 [500]: /test4.php – Class ‘Mongo’ not found in /home/vagrant/cookie/test4.php on line 2

pearをインストール

yum install php-pear
pear upgrade --force Archive_Tar
pear upgrade --force Console_Getopt
pear upgrade PEAR

>>XML Extension not found
なに!?

こちらの記事を参考に、php -m とphp -n -mを打つ
https://serverfault.com/questions/589877/pecl-command-produces-long-list-of-errors

$ php -m
bz2
calendar
...
xml

[vagrant@localhost ~]$ php -n -m
Core
date
ereg
filter
hash
libxml
mhash
openssl
pcntl
pcre
readline
Reflection
session
SPL
standard
zlib

vi `which pecl`で、-nを削除します。

#!/bin/sh
exec /usr/bin/php -C -n -q -d include_path=/usr/share/pear \
    -d date.timezone=UTC \
    -d output_buffering=1 /usr/share/pear/peclcmd.php "$@"
pecl install mongo

Download of “pecl/mongo” succeeded, but it is not a valid package archive

なに????
stack overflowを見ます。
https://stackoverflow.com/questions/25590621/pecl-install-mongo-command-for-mongo-1-5-5-tgz-produce-invalid-tgz-error

再度インストール

sudo pecl install --nocompress mongo

引き続き、
Download of “pecl/mongo” succeeded, but it is not a valid package archive

頭来た、php.netを参考に手動でインストール
http://php.net/manual/ja/mongo.installation.php

$ tar zxvf mongo-1.6.16.tar
$ cd mongo-1.6.16
$ phpize
$ ./configure
$ make all
$ sudo make install

mongo.soが/usr/lib64/php/modulesに通ったので、php.iniでextension=mongo.soを追加
httpd restart

error messasge
/lib64/libc.so.6: version `GLIBC_2.14′ not found
はあ???

mongoDB基本操作

// app dbを使う
use app
// collection ‘na007’ を作成
db.createCollection(‘na007′);
// collectionにdocumentをinsert
db.na007.insert({訪問時間:’2018-04-15 07:27:13′, ip:’192.168.33.1’});
// collection ‘na007’からfind
db.na007.find();

nosqlなので、data typeを指定する必要がありません。
先頭のカラムに”_id”: ObjectID(“hogehoge”); というidが自動的に附番されています。これは、ハッシュ化されたような英数字の為、autoincrementではなさそうです。(mongoDBの中のアルゴリズムで、順番をソートできるようにしているかもしれません)

なかなかお洒落ですね。気になるのはdocumentのカラム

// シングルクオテーションで囲ってinsert
db.na007.insert({‘visit’:’Returned User’, ‘referrer’:’/view.php’});

->結果
{ “_id” : ObjectId(“5ad283afb83c546bc5d039bd”), “visit” : “Returned User”, “referrer” : “/view.php” }
囲っても囲わなくても、同じですね。

documentがjsonみたいなので、jsonと相性がいいかもしれませんね。
insert、updateやfind()の機能はいっぱいあるようですが、全通りやっても覚えきれないので、作りながら必要な機能を学んでいきたいと思います。

MongoDB fundamental

mongoDBの構造

- DB
 - Collection
   - Document
   - Document
   - Document
   - Document
   - Document
   - Document

collectionがtableのようなもので、Documentがレコードのようなもの

$ mongoで入る

[vagrant@localhost cookie]$ mongo

use dbnameでdb作成

> show dbs
local  0.078GB
mydb   0.078GB

> use app
switched to db app