サイトアイコン 上尾市のWEBプログラマーによるブログ

「入門Node.jsプログラミング 」の感想・備忘録4

「入門Node.jsプログラミング 」の感想・備忘録3の続き

Lesson13

MongoDBを使う

MongoDBのインストール(macOS Homebrewの場合)

  1. brew install mondodb-community(書籍本文ではmongodbだが古い)
  2. brew services start mongodb-community

Homebrewのmongodbの場合、設定ファイルは /usr/local/etc/mongod.confにある。
設定ファイルでデータ保存場所は/usr/local/var/mongodbに設定されている。

MongoDBシェルによるデータベース操作

  1. mongo
  2. recipeデータベースへの切り替え。存在しない場合はデータベースが作成される。
    use recipe
  3. データの登録
    db.contacts.insertOne({name: 'Jon Wexler', email: 'jon@jonwexler.com',note: 'Decent guy.'})
    db.contacts.insertOne({name: 'Taro Yamada', email: 'yamadataro@example.com',note: 'Nice guy.'})
    MongoDBにはカラム定義がないため、データ追加時に勝手にカラムを追加することができる。
    ただし、運用やメンテナンスを考えると、登録するデータのカラムは合わせるべきである。
  4. データの検索
    db.contacts.find()
    db.contacts.findOne({name: 'Taro Yamada'})

MongoDBシェルで利用可能なコマンド

これらのメソッドは非同期処理となるので、通常はMongooseを使ってPromiseで順番を制御する。

アプリからMongoDBに接続

1. インストール

2. index.jsの作成

"use strict";

const mongoClient = require("mongodb").MongoClient;
const dbUrl = 'mongodb://localhost:27017';
const dbName = 'recipe'

mongoClient.connect(dbUrl, (err, client) => {
  if (err) {
    throw err;
  }
  const db = client.db(dbName);

  // 登録処理
  db.collection('contacts')
    .insertOne({ name: 'Taro', email: 'taro@example.com'}, (err, db) => {
      if (err) {
        throw err;
      }
      console.log(db);
    });

  // 検索処理
  db.collection('contacts')
    .find()
    .toArray((err, data) => {
      if (err) {
        throw err;
      }
      console.log(data);
    });
});

Lesson14

Mongooseを使う

MongooseはO/Dマッパーである。(D=Document)
find, findOne, findById, findByIdAndUpdate, findByIdAndRemove, remove, save, createなどのメソッドがある。

1. インストール

2. index.jsの作成

'use strict';

const mongoose = require("mongoose");

// 接続処理
mongoose.connect(
  'mongodb://localhost:27017/recipe',
  {useNewUrlParser: true}
);
const db = mongoose.connection;
db.once('open', () => {
  console.log('connected to mongodb.');
});

// スキーマ作成
const subscriberSchema = mongoose.Schema({
  name: String,
  email: String,
  zipCode: Number
});
const Subscriber = mongoose.model("Subscriber", subscriberSchema);

// new, saveによる登録
const jiro = new Subscriber({
  name: 'Jiro',
  email: 'jiro@example.com',
});
jiro.save((err, savedDocument) => {
  if (err) {
    console.log(err);
  }
  console.log(savedDocument);
});

// createによる登録
Subscriber.create({
  name: 'Saburo',
  email: 'saburo@example.com',
}, (err, savedDocument) => {
  if (err) {
    console.log(err);
  }
  console.log(savedDocument);
});

モデルを別ファイルに分ける

1. models/subscriber.jsの作成

'use strict';

const mongoose = require('mongoose');
const subscriberSchema = mongoose.Schema({
  name: String,
  email: String,
  zipCode: Number
});
module.exports =  mongoose.model('Subscriber', subscriberSchema);

2. index.jsの修正

const mongoose = require("mongoose");
const Subscriber = require('./models/subscriber');
モバイルバージョンを終了