Mongoose의 기본적인 CRUD 방법

Casin·2022년 10월 20일
0

Mongoose(MongoDB)

목록 보기
1/3
post-thumbnail
  • 기본적인 JavaScript 사용방법을 알아야함
  • 사용하려는 컬렉션의 스키마 정의 Model 파일이 생성되어 있어야함

CREATE

const mongoose = require("mongoose");
const User = require("./model/user");
const url = "mongodb+srv://mongoDB_URI";

!async function() {
  await mongoose.connect(url, { dbName: "example" });
  
  User.create({ name: "홍길동", age: 10, type: "내국인", country: "KOR" });
}();

mongoDB는 dbName에 설정한 example DB 또는 users 컬렉션이 없어도 자동으로 생성 후 문서를 추가합니다.

만약 여러개의 문서를 생성하고 싶다면 다음과 같이 생성할 수 있습니다.

User.insertMany([
    { name: "홍길동", age: 10, type: "내국인", country: "KOR" },
    { name: "하이", age: 10, type: "외국인", country: "JPN" }
]);

READ

find, findOne, findById

const mongoose = require("mongoose");
const User = require("./model/user");
const url = "mongodb+srv://mongoDB_URI";

!async function() {
  await mongoose.connect(url, { dbName: "example" });
  
  // 해당 컬렉션의 모든 문서를 불러오기
  const result = await User.find({});
  
  // 해당 컬렉션의 매칭되는 모든 문서를 불러오기 (Array 반환)
  const result = await User.find({ name: "홍길동" });
  
  // 해당 컬렉션의 매칭되는 문서 하나만 불러오기 (최초 매칭되는 한개의 문서만 반환)
  const result = await User.findOne({ name: "홍길동" });
  
  // 해당 컬렉션의 _id 값과 매칭되는 문서 하나를 불러오기
  const result = await User.findById("62d824a7296e056de86cfb34");
  
}();

CRUD 관련 function을 사용하면 결과는 Query라는 객체가 만들어지게 되고, 그 상태에서 추가로 mongoose에 내장된 Query 객체의 function들을 추가로 chaining 해서 사용 가능하다.

READ에서 사용할 수 있는 Query 객체의 추가 function들은 나중에 따로 다룰 예정.

UPDATE

updateOne, updateMany

  • updateOne, Many는 기본적으로 $set으로 설정되어 있다.
  • UPDATE 할때는 validating 기능의 default값이 false이기 때문에 유효성 검사를 하기 위해서는 true로 바꿔 주어야 한다.
  • updateOne, Many의 반환값: acknowledged, modifiedCount, upsertedId, upsertedCount, matchedCount
const mongoose = require("mongoose");
const User = require("./model/user");
const url = "mongodb+srv://mongoDB_URI";

!async function() {
  await mongoose.connect(url, { dbName: "example" });
  
  // 해당 컬렉션의 매칭되는 한개의 문서를 업데이트
  const result = await Account.updateOne(
    { name: "홍길동" }, // update 해야하는 문서를 찾는 조건부
    { name: "Casin", age: "20" }, // update 해야하는 데이터
    { runValidators: true }, // 모델링 유효성 검사 사용
  );
  
}();

findOneAndUpdate, findByIdAndUpdate

  • findOne(ById)AndUpdate의 리턴값은 찾은 문서가 반환됨.
  • 반환값은 update 되기 전의 데이터가 나오며 바뀐 후의 문서를 반환하려면 returnDocument: "after"로 설정해 주어야 한다.
const mongoose = require("mongoose");
const User = require("./model/user");
const url = "mongodb+srv://mongoDB_URI";

!async function() {
  await mongoose.connect(url, { dbName: "example" });
  
  // 해당 컬렉션의 매칭되는 한개의 문서를 업데이트
  const result = await User.findByIdAndUpdate(
    "62d824a7296e056de86cfb34", // update 해야하는 문서를 찾는 조건부
    { age: 30 }, // update 해야하는 데이터
    { returnDocument: "after" } // 반환 순서 설정 기본값: before
  );
  
}();

DELETE

deleteOne, deleteMany

  • deleteOne은 매칭되는 단일 문서를 삭제함
  • deleteMany는 매칭되는 모든 문서를 삭제함
  • deleteOne, Many를 사용해서 문서를 제거하면 acknowledged:[boolean], deleteCount: [number] 가 반환됨
const mongoose = require("mongoose");
const User = require("./model/user");
const url = "mongodb+srv://mongoDB_URI";

!async function() {
  await mongoose.connect(url, { dbName: "example" });
  
  // ...deleteOne({ _id: "62d824a7296e056de86cfb34" })
  const result = await deleteOne({ name: "홍길동" });
  
}();

findOneAndDelete, findByIdAndDelete

  • deleteOne과 다르게 find...AndDelete는 삭제되는 문서가 반환됨
const mongoose = require("mongoose");
const User = require("./model/user");
const url = "mongodb+srv://mongoDB_URI";

!async function() {
  await mongoose.connect(url, { dbName: "example" });
  
  // 해당 컬렉션에 매칭되는 문서 하나를 찾은다음 삭제
  const result = await findOneAndDelete({ name: "홍길동" });
  
  // 해당 컬렉션에 _id값과 매칭되는 문서 하나를 찾은다음 삭제
  const result = await findByIdAndDelete("62e0bfbe3bb94ca49c103e06");
  
}();

Static function

추후 스키마&모델링 포스팅때 다룰 예정.

profile
그저 그런 개발 교육생

0개의 댓글