Node.jsでDB(MongoDB)を使ってみた

# 1. インストール
インストール用のファイルを設定。
`sudo vim /etc/yum.repos.d/mongodb-org-3.4.repo`

```mongodb-org-3.4.repo
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
```
インストールを実施。
`sudo yum -y install mongodb-org`

JavascriptからMongoDBを利用するためのドライバーを追加。
`npm install mongodb`

# 2. データベース準備
## 2-1. データベース作成
`use testdb`
※DBが存在しない場合、自動的に作られる。

## 2-2. コレクション作成（テーブルのようなもの）
`db.createCollection('testCollection')`

# 3. プログラムから利用
## 3-1. INSERT
`obj` に登録したいデータを入れたらOKです。
レコードごとにカラム（フィールド）が異なっていても登録できます。
例えば、一行目は「name, age」、二行目は「name, address」ということも出来ます。

```insert.js
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://127.0.0.1:27017/";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  var dbo = db.db("testdb");
  var obj = { name: "Company Inc", address: "Highway 37" };
  // ----------------------------------------------------------------------
  // INSERT
  // ----------------------------------------------------------------------
  dbo.collection("testCollection").insertOne(obj , function(err, res) {
    if (err) throw err;
    db.close();
  });
});
```
ターミナルで `node insert.js` を実行。

## 3-2. SELECT
`obj` に検索条件のキーと値を入れて`find` に渡すと取得できます。
結果は`result` に入っています。

```select.js
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  var dbo = db.db("testdb");
  var obj = {name: "Company Inc"};
  // ----------------------------------------------------------------------
  // SELECT
  // ----------------------------------------------------------------------
  dbo.collection("testCollection").find(obj).toArray(function(err, result) {
    if (err) throw err;
    console.log(result);
    db.close();
  });
});
```

ターミナルで `node select.js` を実行。

## 3-3. UPDATE
`where` に更新条件のキーと値を入れます。
`set` に更新したいキー（カラム名）と値を入れます。
`updateMany` の第一引数に`where` 、第二引数に`set` を渡すと、
条件に合致するドキュメント（レコード）がすべて更新されます。
`$set` というキーの値として、更新用のオブジェクトを指定することで、
特定のフィールド（カラム）のみ更新することが出来ます。
※$setを利用しないとレコードがまるごと更新用のオブジェクトで上書きされます。

```update.js
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  var dbo = db.db("testdb");
  var where = {name: "Company Inc"};
  var set = {$set: {address: "update address!"}};
  // ----------------------------------------------------------------------
  // UPDATE
  // ----------------------------------------------------------------------
  dbo.collection("testCollection").updateMany(where, set, function(err, result) {
    if (err) throw err;
    console.log("update");
    db.close();
  });
});
```

ターミナルで `node update.js` を実行。


## 3-4. DELETE
`where` に削除条件のキーと値を入れます。
`deleteMany` の第一引数に渡すと、条件に合致するドキュメント（レコード）がすべて削除されます。

```delete.js
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
  if (err) throw err;
  var dbo = db.db("testdb");
  var where = {address: "update address!"};
  // ----------------------------------------------------------------------
  // DELETE
  // ----------------------------------------------------------------------
  dbo.collection("testCollection").deleteMany(where, function(err, result) {
    if (err) throw err;
    console.log("delete");
    db.close();
  });
});
```

ターミナルで `node delete.js` を実行。