0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

nodejs + express + mongoDB のCRUDまとめ

Last updated at Posted at 2022-11-30

はじめに

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

image.png
Database -> Cluster0 -> Connect

image.png

Connect your application

image.png
Node,jsを選択し、中の内容をコピーして置きます。

image.png

Database -> (Browse) Collections -> Create Database
私はnodejs-work-requestとしてDatabaseをつくり、そこにusersというcollectionをつくりました

image.png

INSERT DOCUMENTからデータを1個作っておきます。

image.png

Database Access からADD NEW DATABASE USER
DATABASEに接続するためのID, Passwordを設定しておきます。

CRUD

基本設定

server.js
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)
    })
})

image.png

image.png

Create

app.post('/users', function (req, res) { 
    db.collection('users').insertOne({ user_name: req.body.user_name, age: req.body.age })
    res.send('saved')
})

image.png

image.png

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')
        })
})

image.png

image.png

Delete

app.delete('/users', function(req, res) {
    db.collection('users').deleteOne({_id: ObjectID(req.body.id)}, function(err, result) {
        res.send('delete done')
    })
})

image.png

image.png

まとめ

MYSQLの方が使用率は圧倒的に高いと言えるが、サーバーを持たず、クラウド型でデータベースを使えることは、個人で開発・勉強をする上ではとてもメリットがある。そして、もしサーバーをデプロイしたときに、自分でデータベースを管理できる。しかし、NonSQLなので、今まで簡単に使っていたJOINでまとめてデータを入手することは少し工夫が必要そうです。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?