Node.js의 Express를 공부하는데 많은 참고자료에서 MongoDB 기반 Mongoose를 통해서 DB를 생성하고 연결하는 것을 알 수 있었다. 그래서 Mongoose를 먼저 파헤쳐보고 추후에 Express와 MongoDB를 연결해보도록 하겠다.
기존에 생성해놓은 express-study 폴더를 통해서 mongoose를 설치해보자
$ npm install mongoose --save
설치 후 getting_started.js 파일을 생성해 아래와 같이 적어보자
const mongoose = require('mongoose');
main().catch(err => console.log(err));
async function main() {
await mongoose.connect('mongodb://localhost:27017/test');
}
그런 다음 mongodb url을 통해 mongodb와 node.js를 연결시킬 수 있다.
mongoose에서는 Schema를 통해서 DB를 생성할 수 있다.
const kittySchema = new mongoose.Schema({
name: String
});
DB의 목차는 name이고 그 안에 집어넣는 데이터의 형태는 String의 형태로 되어 있다. 이러한 Schema로 새로운 Kitten이라는 모델을 생성할 수 있다.
const Kitten = mongoose.model('Kitten', kittySchema);
const silence = new Kitten({name: 'Silence'});
console.log(silence.name);
Shema를 통해 Kitten이라는 모델을 생성했고 silence라는 Kitten의 인스턴스 생성을 통해서 데이터를 집어 넣었다.
kittySchema.methods.speak = function speak() {
const greeting = this.name
? "Meow name is " + this.name
: "I don't have a name";
console.log(greeing);
}
const = Kitten = mongoose.model('Kitten', kittySchema);
여기서 생성된 스키마에 methods.함수이름을 통해 함수를 집어넣었음을 알 수 있다.
const fluffy = new Kitten({name: 'fluffy'});
fluffy.speak();
우리가 fluffy라는 말하는 고양이를 생성하기는 했지만 실제 MongoDB 상에는 저장된 것이 아니다. 따라서, Mongoose의 save(), find() 함수로 데이터를 저장하고 찾을 수 있다.
await fluffy.save();
fluffy.speak();
const kittens = await Kitten.find();
console.log(kittens);
// 만약 특정 이름으로 찾으려 한다면, 스키마 형태에 맞게 쿼리를 하면 된다.
await Kitten.find({name: /^fluff/});
이번에는 간단하게 Mongoose를 사용하는 방법에 대해서 사용했는데 다음에는 Mongoose의 기본이 되는 Schema부터 자세하게 공부할 예정이다.