MongoDB & node.js - mongoose

스윗포테이토·2022년 10월 14일
1
post-custom-banner

MongoDB

NOSQL 데이터베이스 중 가장 유명하고 무난하다. 따로 스키마 설계가 필요 없다.
아래는 처음 접했을 때 조금 헷갈렸던 용어들이다.

  • document: RDBMS에서의 record = row와 비슷한 개념이라고 생각하면 된다.
    예시
    {
        "_id": ObjectId("5099803df3f4948bd2f98391"),
        "key1": "value1",
        "key2": "value2",
    }
  • ObjectedId : RDBMS의 pk역할을 하여 각 document의 유일성을 보장한다.

Mongoose

ODM(Object Data Modeling)의 일종으로 Node.js 상에서 MongoDB를 쉽게 다룰 수 있는 기능을 제공한다.

install

npm install mongoose

sample code

  1. 백엔드에서 연결

    const mongoose = require("mongoose");
    require("dotenv").config(); // to use process.env.MONGO_URI
    
    // mongoDB 연결
    mongoose
      .connect(process.env.MONGO_URI, {
        useNewUrlParser: true,
      })
      .then(() => {
        console.log("Connected to MongoDB");
      })
      .catch((err) => {
        console.log(err);
      });

    URI 설정 참고

    MONGO_URI = mongodb://<user>:<pw>@<host>:<port number>/<db name>
  2. 데이터 스키마 작성
    처음에 이부분이 헷갈렸다. 스키마가 필요 없다면서 왜...?
    그러나 이건 MongoDB에서 필요하다기 보다는 mongoose를 사용하기 위해서 정의해주어야 한다. 자료형이 확실하지 않은 경우는 mongoose.Schema.Types.Mixed로 지정해줄 수 있다.

    const mongoose = require("mongoose");
    
    // 스키마 생성
    const testSchema = new mongoose.Schema(
      {
        data1: String,
            data2: Number,
        unknownObj: mongoose.Schema.Types.Mixed,
      },
      { timestamps: true }
    );
  • 위와 같이 timestaps를 true로 해줄 경우 데이터가 삽입된 시간이 기록되는데, MongoDB는 따로 Timezone 설정을 해주는게 없다. 공식 문서를 읽어보면 시차를 계산해서 반영하도록 유도하고 있다.
  1. 모델

    // 모델 생성 후 export
    module.exports = mongoose.model("Testfile", RecordSchema);
    • Testfile.find() 등과 같이 사용 가능하다.
  2. 객체 생성

    const newtestfile = new Testfile({
          data1: "data",
    			data2: 1,
    	    unknownObj: {inputData:3, outputData:9},
        });
  3. 생성한 객체(document) 저장

    newtestfile.save().then(()=> console.log("saved"));
profile
나의 삽질이 미래의 누군가를 구할 수 있다면...
post-custom-banner

0개의 댓글