개발/Node.js & javascript

Mongoose 사용하기 - 연결, 스키마정의, select, update

dev-yoon-jerry 2023. 1. 2. 21:42

따로 서비스에서 몽고디비조회나 update 만들어 진건 없고.. 간단하게 처리할겸 샘플소스 만들어보았다.
mongoose 연결, 스키마생성, select, updateAll 이해하기엔 좋을 것 같다.

const mongoose = require(mongoose);

const test = async () => {
    const dbURI = `mongodb://{id}:{pw}@{ip}:{port}/{dbname}`; // 몽고디비 연결 URI
    mongoose.connect(dbURI, {
      useCreateIndex: true,
      useNewUrlParser: true,
      useUnifiedTopology: true,
      useFindAndModify: false,
    });
    
    const { connection } = mongoose; // 커넥션 저장
    
    connection.on('error', console.error.bind(console, 'connection error:'));
    // 연결됨 console 출력
    connection.once('open', () => {
      console.info('MongoDB connected');
    });

    const basicConstraints = { type: String, require: true };
    // 스키마 생성
    const testschema = new mongoose.Schema(
        {
          name: basicConstraints,
          nick: basicConstraints
        },
        { timestamps: true }
      );
    // 몽구스 모델 스키마매칭
    const process = mongoose.model('testSchema',testschema);
    // 이름으로 검색
    const changeTest = async () => {    
        const filter = {name: "김철수"};
        let res;
        try {
          res = await process
            .find(filter)
            .then((result) => {
              // 여기에 필터링 더 있음.
              return result;
            })
            .catch((err) => {
              console.error(`changeTest error : ${err}`);
            });
        } catch (err) {
          console.error(`changeTest error : ${err}`);
        }
        return res.map(e => e.nick);
      };
    const result = await changeTest();
    console.log(JSON.stringify(result));
}
test();

여기까지는 select 해오는 테스트. 

const changeTest = async () => {    
        const filter = {name: "김철수"};
        let res;
        try {
          res = await process
            .updateMany(filter,{nick: "none"})
            .then((result) => {
              // 여기에 필터링 더 있음.
              return result;
            })
            .catch((err) => {
              console.error(`changeTest error : ${err}`);
            });
        } catch (err) {
          console.error(`changeTest error : ${err}`);
        }
        return res;
      };

이건 updateAll 테스트.
log부분은 원래 winston logger썼는데 그대로 실행하면 winston 없어 에러날테니 그냥 console찍는걸로 수정했다.