🏓 Step 6. Model 만들기 - Chat data MongoDB에 저장하기

imacoolgirlyo·2019년 4월 2일
0
  • db.js에서 어떤 일이 일어나고 있는 지 ? : mongodb와 연결? mongoose의 역할은 ?
  • mongodb와 연결한 db.js를 app.js에서 import 했다.
  • model/Chat, model/Like 에 schema를 작성했다.
import mongoose from 'mongoose';

const ChatSchema = new mongoose.Schema({
    message : {
        type: String,
        required : 'Message is required'
    },
    likes : [
        {
            type : mongoose.Schema.Types.ObjectId,
            ref: "Like"
        }
    ]
});

const model = mongoose.model("Chat", ChatSchema);
export default model;

ChatSchema를 "Chat"으로 컴파일?하고 model은 뭐지?
app.js 에서 Chat Model로 데이터를 저장하고 싶은데 이름을 Chat이 아닌 model을 적어야하나?
=> app.js에서 Chat을 가져오고 싶을 때, 아래처럼 Chat 이름으로 바로 가져올 수 있음 . ❌ 근데 왜 이름을 model로 export를 하는지는 모르겠음

import Chat from './models/Chat' 
import model from './models/Chat';

io.on('connection', function(socket){
    socket.on('new message', function(msg){
        // message 보낸 username, 좋아요 수도 함께 저장
        model.create({message : msg});
        io.emit('notification', msg);
    })
});
const model = mongoose.model("Chat", ChatSchema);
export default model;

module.exports = mongoose.model('Album', AlbumSchema);

위와 아래는 동일한 표현이다. mongoose instance의 model constructor를 호출하여 collection의 이름 ex. Chat, Album 과 schema definition의 참조를 전달한다.

  • const chats = Chat.find({}); 왜 Chat에서 모든 데이터들을 가져오지 못하는거지..
 Chat.find({}, function(err, chats){
        res.render('home', { pageTitle : 'home', chats});
    });

하니 Chat 모델의 chats document들을 가져와서 chats로 전달해 주었다. 위의 X 와 무슨 차이가 있는지는 모르겠지만 await, async와도 관련 있는 것 같다. 아무튼 해결해서 뿌듯!

  • Model은 Schema 정의로 부터 컴파일된 constructor이다. 모델의 instance를 document라고 한다. 모델들은 Mongodb 데이터베이스로 부터 documents를 읽거나 만들 수 있다.

0개의 댓글