はじめに
mongoDBはNon-SQLとしてMySQLのような行列のデータではなく、JSON構造のデータである。そもそもクラウドデータベースなので、環境を変えながら開発をしたい場合、個人が気軽にデータベースを持ちたい場合、利点を持つ。ここではnodejs + mongodbを用いた基本的はCRUD (Create, Read, Update, Delete)をPostmanを用いて簡単にまとめた。
PostManの参考
環境
mongodb 4.12.1
window 10
express: 4.18.2
MongoDB
Database -> Cluster0 -> Connect
Connect your application
Database -> (Browse) Collections -> Create Database
私はnodejs-work-requestとしてDatabaseをつくり、そこにusersというcollectionをつくりました
INSERT DOCUMENTからデータを1個作っておきます。
Database Access からADD NEW DATABASE USER
DATABASEに接続するためのID, Passwordを設定しておきます。
CRUD
基本設定
const express = require('express');
const app = express();
const { ObjectID } = require('bson');
require('dotenv').config()
app.use(express.json());
var db
const MongoClient = require('mongodb').MongoClient
MongoClient.connect(`mongodb+srv://${process.env.MONGODB_ID}:${process.env.MONGODB_PASSWORD}@cluster0.akash.mongodb.net/?retryWrites=true&w=majority`, function (err, client) {
if (err) return console.log(err)
db = client.db('nodejs-work-request')
app.listen(8080, function () {
console.log('listening on 8080')
})
})
//この下にCRUD
ここでは.evn
ファイルに保存していますが、
{process.env.MONGODB_ID}
、{process.env.MONGODB_PASSWORD}
の代わりに先ほど設定したDabase Access UserのIDとパスワードを入力
Read
app.get('/users/:id', function (req, res) {
// (req.params.idはStringなので、ObjectIDとして変換します。
db.collection('users').findOne({_id: ObjectID(req.params.id)}, (err, result) => {
res.send(result)
})
})
Create
app.post('/users', function (req, res) {
db.collection('users').insertOne({ user_name: req.body.user_name, age: req.body.age })
res.send('saved')
})
Update
app.put('/users', function (req, res) {
db.collection('users').updateOne({ _id: ObjectID(req.body.id) },
{ $set: { user_name: req.body.user_name, age: req.body.age } },
function (err, result) {
res.send('update done')
})
})
Delete
app.delete('/users', function(req, res) {
db.collection('users').deleteOne({_id: ObjectID(req.body.id)}, function(err, result) {
res.send('delete done')
})
})
まとめ
MYSQLの方が使用率は圧倒的に高いと言えるが、サーバーを持たず、クラウド型でデータベースを使えることは、個人で開発・勉強をする上ではとてもメリットがある。そして、もしサーバーをデプロイしたときに、自分でデータベースを管理できる。しかし、NonSQLなので、今まで簡単に使っていたJOINでまとめてデータを入手することは少し工夫が必要そうです。