node js에서의 mongoDB

이수연·2023년 1월 22일
0

node.js

목록 보기
2/2

이주동안의 백엔드 수업이 끝났지만 단기간에 많은양을 배웠고, 정리는 필수라고 생각이 들어 포스팅 하게 되었습니다. 혹시라도 잘못된점이 있다면 댓글 부탁드립니다.

mongoDB

스키마 관리

스키마를 정의하지 않고 데이터를 사용할 수 있는 것은 NoSQL의 장점이지만, 데이터 형식을 미리 정의해야 코드 작성과 프로젝트 관리에 유용함 Mongoose는 Code-Level에서 스키마를 정의하고 관리할 수 있게 해줌

Populate

MongoDB는 기본적으로 Join을 제공하지 않음 Join과 유사한 기능을 사용하기 위해선 aggregate라는 복잡한 쿼리를 해야 하지만, Mongoose는 populate를 사용하여 간단하게 구현할 수 있음

스키마 정의

const{ Schema } = require('mongoose');
constPostSchema= newSchema({title:  String, content: String,}, 
{timestamps: true,});
module.exports=PostSchema;
  • timestamps 옵션을 사용하면 생성, 수정시간을 자동으로 기록해줌

모델 만들기

constmongoose = require('mongoose');
const PostSchema= require('./schemas/board');
exports.Post= mongoose.model('Post', PostSchema)
  • 작성된 스키마를 mongoose에서 사용할 수 있는 모델로 만들어야 함
  • 모델의 이름을 지정하여 Populate 등에서 해당 이름으로 모델을 호출할 수 있음

데이터 연결하기

constmongoose = require('mongoose');
const{ Post }require('./models');
mongoose.connect('mongodb://localhost:27017/myapp');
  • connect 함수를 이용하여 간단하게 데이터베이스에 연결할 수 있음

CRUD

CREATE: create
READ: find, findById, findOne
UPDATE: updateOne, updateMany,findByIdAndUpdate, findOneAndUpdate
DELETE: deleteOne, deleteMany,findByIdAndDelete, findOneAndDelete

Create

const created = awaitPost.create({title: 'first title',content: 'second title',});
const multpleCreated= awaitPost.create([item1, item2]);
  • create 함수를사용하여Document 생성
  • create 함수안에 배열을 사용할 경우 => 복수 document 생성 가능
  • create 함수안에 object를 사용할경우 => 단일 document 생성 가능
  • create는 생성된 Document를 반환해 줌

Read

const listPost= awaitPost.find(query);
  • query를 사용하여 검색하거나 findById를 사용하면 ObjectID로 Document를 검색할 수 있음

Query

Person.find({name: 'kyubum',age: {$lt: 20,$gte: 10,},
languages: {$in: ['ko', 'en'],},$or:[{ status: 'ACTIVE'}, { isFresh: true},],});
  • MongoDB에도 SQL의 where와 유사한 조건절 사용 가능
  • MongoDB의 query는 BSON 형식으로, 기본 문법 그대로 mongoose에서도 사용 가능
  • { key: value }로 exact match
  • $lt, $lte, $gt, $gte를사용하여range query작성가능
  • $in을 사용하여 다중값으로 검색
  • $or를 사용하여 다중조건 검색
Person.find({ name:['elice','bob']});
  • Mongoose는 쿼리 값으로 배열이 주어지면 자동으로$in 쿼리를 생성해 줌

[https://docs.mongodb.com/manual/reference/operator/query/](몽고디비 쿼리)

UPDATE

constupdateResult= awaitPost.updateOne(query, {...});
  • mongoose의 update 는 기본적으로 $set operator를 사용하여, Document를 통째로 변경하지 않음

Delete

constdeleteResult= awaitPost.deleteOne(query);
  • delete 관련 함수를 사용하여 Document 삭제

populate

constPost = newSchema({...user: { type: Schema.Types.ObjectId, ref: 'User' },
comments: [{type: Schema.Types.ObjectId,ref: 'Comment',}],});
const post = awaitPost.find().populate(['user', 'comments']);
  • Document 안에 Document를 담지 않고, ObjectID를 가지고 reference 하여 사용할 수 있는 방법을 제공함

  • Document에는 reference 되는 ObjectID를 담고, 사용할 때 populate 하여 하위 Document처럼 사용할 수 있게 해줌

0개의 댓글