본문 바로가기
데이터베이스

mongoose로 데이터 찾기

by 즐거운코딩 2023. 7. 26.
반응형

이전 글에서 mongoose로 데이터를 입력하는 방법에 대해 알아보았고, 다음은 입력한 데이터를 조회하는 방법에 대해 설명하고자 합니다.

API Model 에서 .find(), .findById(), .findOne() 사용법은 다음과 같습니다.

예시)

// find all documents
await MyModel.find({});

// find all documents named john and at least 18
await MyModel.find({ name: 'john', age: { $gte: 18 } }).exec();

// executes, name LIKE john and only selecting the "name" and "friends" fields
await MyModel.find({ name: /john/i }, 'name friends').exec();

// passing options
await MyModel.find({ name: /john/i }, null, { skip: 10 }).exec();

 find 의 결과문은 완전한 Promise 가 아니어서  .then() 함수를 사용 가능하지만 Mongoose query 라고 부르고, 

query는 thenable 객체라고 합니다

예시)

Band.findOne({ name: 'Guns N\' Roses' }).then(function(doc) {
  // use doc
});

완전한 비동기 함수로 사용하기 위해서는  exec() 를 붙이면 되며, 이로서 await 를 사용할 수 있습니다.

 

index.js 에서 mongoose 로 Movie 데이터베이스 연결하도록 파일을 수정하고, node CLI 에서 .load index.js 를 불러옵니다.

const mongoose = require("mongoose");
mongoose
  .connect("mongodb://127.0.0.1:27017/movieApp")
  .then(() => {
    console.log("connection open !!!");
  })
  .catch((err) => {
    console.log("OH NO error !!!");
    console.log(err);
  });

const movieSchema = new mongoose.Schema({
  title: String,
  year: Number,
  score: Number,
  rating: String,
});

const Movie = mongoose.model("Movie", movieSchema);

 

> Movie.fine({}) 로 조회하면 thenable 객체로 복잡한 쿼리문이 조회되는데 우리가 필요한 정보를 바로 주지 않는다.

이 때 .then 함수로 필요한 데이터만 불러올 수 있다. 아래는 Movie에 입력한 5개 영화 전체가 조회됩니다.

결과는 array 입니다.

이중에서 원하는 영화만 조회하고자 하면 find 함수에 검색조건을 넣어줍니다.

find함수에서 검색조건 입력하여 데이터 조회
2010년 이후 출시된 영화 조회하기
1990 이전 영화조회 하기 - 3개 영화가 조회

이제 findOne 에 대해 알아보겠습니다.

첫번째 입력한 Amadeus 1개 영화만 조회됩니다. 즉, 조회 조건에 맞는 첫번째 데이터만 조회됩니다.

findById 는 Express 를 사용할 때 유용합니다. URL에 id 가 포함되어 조회될 때 사용할 수 있습니다.

영화 ID 로 조회하는 예시

이와 같이 ID 로 조회하는 것은 URI 로 입력된 블로그 포스트, 댓글 등을 조회하는 데 유용하게 사용할 수 있습니다.

반응형