반응형

🚀

이번 포스팅은 생각보다 쉬운...? node.js와 mongoose로 mongoDB에 기본 삽입, 조회, 갱신, 삭제하는 방법에 관한 내용입니다.

 

📖 mongoose

mongoose는 mongoDB를 쉽게 사용할 수 있도록 도와주는 node module입니다.

 

📌 mongoDB에 연결하기

const dotenv = require("dotenv");
dotenv.config({ path: ".env" });

var mongoose = require("mongoose");

var db = mongoose
  .connect(process.env.MONGODB_URL)
  .then((res) => console.log("Connected to DB"))
  .catch((err) => console.log(err));

저 같은 경우에는 dotenv 모듈을 사용해서 mongoDB URL을 .env 파일에 보관하였습니다.

 

그러한 과정이 귀찮으신 분은 아래와 같이 선언해줍니다.

var mongoose = require("mongoose");
var db = mongoose.connect("mongodb+srv://<username>:<password>@cluster0.yb2ag.mongodb.net/myFirstDatabase?retryWrites=true&w=majority");

<username>, <password> 부분에 mongoDB테이블을 만들 때 적으셨던 name과 password를 적으시면 됩니다.
(적으실 때 '<', '>' 이 부분 포함 X)

ex) mongodb+srv://root:1234@cluster0.yb2ag.mongodb.net/myFirstDatabase?retryWrites=true&w=majority

 

📌 스키마 등록

// 스키마 등록
const usersSchema = new mongoose.Schema(
  {
    username: {
      type: String,
      required: true,
    },
    password: {
      type: String,
      required: true,
    },
    age: {
      type: Number,
      required: true,
    },
  },
  {
    versionKey: false, // "__v" 항목이 생기지 않도록 설정
  }
);
var usersModel = mongoose.model("users", usersSchema);

모델은 mongoDB에서 데이터를 저장하는 기본단위 Document 형태를 의미합니다.
테이블에 유저의 name, password, age를 기입할 수 있도록 위와 같이 스키마를 선언하였습니다.

 

📌 데이터 추가1

// 데이터 추가1
app.get("/add_1", (req, res) => {
  newUsers = new usersModel();
  newUsers.username = "cocoon";
  newUsers.password = "asd123";
  newUsers.age = 27;
  newUsers.save((err) => {
    if (err) throw err;
    console.log("Add Success!");
    res.send("Add Success!");
  });
});

 

📌 데이터 추가2

// 데이터 추가2
app.get("/add_2", (req, res) => {
  usersModel.create(
    {
      username: "ultra",
      password: "zxc321",
      age: 27,
    },
    (err) => {
      if (err) throw err;
      console.log("Add Success!");
      res.send("Add Success!");
    }
  );
});

 

📌 데이터 추가3

// 데이터 추가3
app.get("/add_3", (req, res) => {
  usersModel.create(
    {
      username: "zeze",
      password: "qwe582",
      age: 29,
    },
    (err) => {
      if (err) throw err;
      console.log("Add Success!");
      res.send("Add Success!");
    }
  );
});

 

📌 데이터 검색

// 데이터 검색
app.get("/search", (req, res) => {
  usersModel.find(
    {
      age: 27,
    },
    (err, items) => {
      if (err) throw err;
      console.log(items);
      console.log("Search Success!");
      res.send("Search Success!");
    }
  );
});

 

📌 데이터 갱신

// 데이터 갱신
app.get("/update", (req, res) => {
  usersModel.findOne(
    {
      username: "cocoon",
    },
    (err, item) => {
      if (err) throw err;
      item.updateOne(
        {
          password: "ppp111",
        },
        (err) => {
          if (err) throw err;
          console.log("Update Success!");
          res.send("Update Success!");
        }
      );
    }
  );
});

<갱신 전>

<갱신 후>

 

 

📌 데이터 삭제

// 데이터 삭제
app.get("/delete", (req, res) => {
  usersModel.findOne(
    {
      username: "cocoon",
    },
    (err, item) => {
      if (err) throw err;
      item.remove((err) => {
        if (err) throw err;
        console.log("Delete Success!");
        res.send("Delete Success!");
      });
    }
  );
});

 

 

📋 app.js 코드

var createError = require("http-errors");
var express = require("express");
var path = require("path");
var cookieParser = require("cookie-parser");
var logger = require("morgan");
var indexRouter = require("./routes/index");
var usersRouter = require("./routes/users");
var app = express();
var port = 3000;
const dotenv = require("dotenv");
dotenv.config({ path: ".env" });

var mongoose = require("mongoose");

var db = mongoose
  .connect(process.env.MONGODB_URL)
  .then((res) => console.log("Connected to DB"))
  .catch((err) => console.log(err));

// 스키마 등록
const usersSchema = new mongoose.Schema(
  {
    username: {
      type: String,
      required: true,
    },
    password: {
      type: String,
      required: true,
    },
    age: {
      type: Number,
      required: true,
    },
  },
  {
    versionKey: false,
  }
);
var usersModel = mongoose.model("users", usersSchema);

// view engine setup
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "pug");

app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, "public")));

app.use("/", indexRouter);
app.use("/users", usersRouter);

// 데이터 추가1
app.get("/add_1", (req, res) => {
  newUsers = new usersModel();
  newUsers.username = "cocoon";
  newUsers.password = "asd123";
  newUsers.age = 27;
  newUsers.save((err) => {
    if (err) throw err;
    console.log("Add Success!");
    res.send("Add Success!");
  });
});

// 데이터 추가2
app.get("/add_2", (req, res) => {
  usersModel.create(
    {
      username: "ultra",
      password: "zxc321",
      age: 27,
    },
    (err) => {
      if (err) throw err;
      console.log("Add Success!");
      res.send("Add Success!");
    }
  );
});

// 데이터 추가3
app.get("/add_3", (req, res) => {
  usersModel.create(
    {
      username: "zeze",
      password: "qwe582",
      age: 29,
    },
    (err) => {
      if (err) throw err;
      console.log("Add Success!");
      res.send("Add Success!");
    }
  );
});

// 데이터 검색
app.get("/search", (req, res) => {
  usersModel.find(
    {
      age: 27,
    },
    (err, items) => {
      if (err) throw err;
      console.log(items);
      console.log("Search Success!");
      res.send("Search Success!");
    }
  );
});

// 데이터 갱신
app.get("/update", (req, res) => {
  usersModel.findOne(
    {
      username: "cocoon",
    },
    (err, item) => {
      if (err) throw err;
      item.updateOne(
        {
          password: "ppp111",
        },
        (err) => {
          if (err) throw err;
          console.log("Update Success!");
          res.send("Update Success!");
        }
      );
    }
  );
});

// 데이터 삭제
app.get("/delete", (req, res) => {
  usersModel.findOne(
    {
      username: "cocoon",
    },
    (err, item) => {
      if (err) throw err;
      item.remove((err) => {
        if (err) throw err;
        console.log("Delete Success!");
        res.send("Delete Success!");
      });
    }
  );
});

// catch 404 and forward to error handler
app.use(function (req, res, next) {
  next(createError(404));
});

// error handler
app.use(function (err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get("env") === "development" ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render("error");
});

app.listen(port, () => {
  console.log(`Server is running, port(${port})`);
});

module.exports = app;

 

 

🔗 Git 저장소 링크

https://github.com/K-Junyyy/MONGOOSE

 

GitHub - K-Junyyy/MONGOOSE

Contribute to K-Junyyy/MONGOOSE development by creating an account on GitHub.

github.com

 

 

반응형

+ Recent posts