Lesson13
MongoDBを使う
MongoDBのインストール(macOS Homebrewの場合)
- brew install mondodb-community(書籍本文ではmongodbだが古い)
- brew services start mongodb-community
Homebrewのmongodbの場合、設定ファイルは /usr/local/etc/mongod.confにある。
設定ファイルでデータ保存場所は/usr/local/var/mongodbに設定されている。
MongoDBシェルによるデータベース操作
- mongo
- recipeデータベースへの切り替え。存在しない場合はデータベースが作成される。
use recipe - データの登録
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にはカラム定義がないため、データ追加時に勝手にカラムを追加することができる。
ただし、運用やメンテナンスを考えると、登録するデータのカラムは合わせるべきである。 - データの検索
db.contacts.find()
db.contacts.findOne({name: 'Taro Yamada'})
MongoDBシェルで利用可能なコマンド
- show dbs: db確認
- show collections: collection確認
- use xxx: db切り替え(存在しない場合はDBが作成される)
- db.yyy.insertOne({aaa: ‘bbb’})
- db.yyy.find()
- db.yyy.findOne({aaa: ‘bbb’}))
- db.yyy.update({{aaa: ‘bbb’})}, {{aaa: ‘ccc’})}): 第2引数の値に更新
- db.yyy.deleteMany({aaa: ‘bbb’}))
- db.yyy.deleteMany({}): 全削除
これらのメソッドは非同期処理となるので、通常はMongooseを使ってPromiseで順番を制御する。
アプリからMongoDBに接続
1. インストール
- npm init
- npm install mongodb
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. インストール
- npm init
- npm install mongodb mongoose
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');