이전 글에서 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 함수에 검색조건을 넣어줍니다.
이제 findOne 에 대해 알아보겠습니다.
첫번째 입력한 Amadeus 1개 영화만 조회됩니다. 즉, 조회 조건에 맞는 첫번째 데이터만 조회됩니다.
findById 는 Express 를 사용할 때 유용합니다. URL에 id 가 포함되어 조회될 때 사용할 수 있습니다.
이와 같이 ID 로 조회하는 것은 URI 로 입력된 블로그 포스트, 댓글 등을 조회하는 데 유용하게 사용할 수 있습니다.
'데이터베이스' 카테고리의 다른 글
mongoose와 express 연결하기(Node.js) (0) | 2023.08.05 |
---|---|
mongoose 데이터 삭제하기 - REPL 사용 (0) | 2023.07.30 |
mongoose로 대량의 데이터 입력하기 (0) | 2023.07.24 |
mongoose로 MongoDB 접속하기 (0) | 2023.07.24 |
MongoDB 데이터 생성 및 조회 (0) | 2023.07.18 |