2012-05-24 4 views
1

나는 node.js + mongoose webapp를 개발하고 있는데 데이터베이스 생성에 대해서는 의심 스럽다. 데이터베이스 정의 방법은 다음과 같습니다.Node js + Mongo db design

var user = new Schema({ 
id : ObjectId, 
name : String, 
password : String, 
email : String, 
created : Date 
}); 
var comment = new Schema({ 
id : ObjectId, 
userId: ObjectId, 
content : String, 
created : Date 
}) 

각 사용자 의견을 사용자와 연결하고 싶습니다. 그래서 ... 가장 좋은 방법은 무엇입니까? 나는 주석 스키마에이 두 가지 중 하나를 추가 할 생각 ...하지만 나는 그것의 정답을 알고하지 않거나 다른 더 나은이 있다면 :

userId: ObjectId, 

나 :

userObject: user 

감사합니다!

희망을 보내주세요.

답변

1

글쎄요. 귀하의 질문에 대한 명확한 대답은 없습니다. 일반적으로 약간의 크기 오버 헤드가있는 네이티브 MongoDB 필드 참조를 사용하지 말 것을 권합니다.

내 프로젝트 모두에 대해 일반적으로 훨씬 더 유연하고 디스크 공간을 절약 할 수있는 첫 번째 솔루션을 선택하게되었습니다. 혼자서 한 번 더 요청할 필요가있을 때.

+0

그래서 한 사용자의 모든 주석을 찾으려면 ... db.Comment.find ({userId : ObjectId ("whatever")}))? –

+1

예. 확실히 내가 뭘 할거야. 'db.Comment.find(). 여기서 ('userId', 'whatever')'는 더 많은 눈 설탕입니다. 이것이 자주 사용하는 함수라면, 이것을 [Model method] (http://mongoosejs.com/docs/methods-statics.html)로 만들 것을 권한다. 예를 들어,'db .User.findComments (...)', 또는'db.Comments.findByUser (...)'. – Pierre

+0

Mongoose도 [populate'] (http://mongoosejs.com/docs/populate.html)를 지원합니다. 추가 질문을 할 수 있습니다. –

0

이 경우의 간단한 데이터 구조는 몽구스가 embedded documents을 호출하는 것을 사용합니다.

Brandon Tilley가 언급했듯이 DBRef와 비슷한 동작과 populate 몽구스의 기능을 살펴볼 수도 있습니다. 이렇게하면 주석 엔터티를 별도의 독립 엔터티로 처리 할 수 ​​있습니다. 단점은 주석의 인스턴스가 있고 사용자의 속성에 액세스하려는 경우 먼저 사용자에 대한 참조를 채워야한다는 것입니다.

결국 귀하의 유스 케이스 및 정보 탐색 방법에 따라 다릅니다. 나는 그것에 대해 너무 많이 생각하지 말고 아무 것도 시도하지 말라. 나중에 다른 구조가 가장 잘 작동한다고 결정하면 변경하십시오. 다행히 MongoDB와 NoSQL은 매우 간단합니다.