2011-07-17 6 views
3

내 MongoDB에 내 시스템에 사용되는 개체가 있다면 자체 컬렉션에 있습니다. 그러나, 나는 그것이 결합 된 다른 객체들에 자동적으로 데이터가 나타나게하는 방법을 이해하지 못한다.몽구스 합치기 데이터

Schema1 = { name: String } 
Schema2 = { something: String, other_thing: [{schema1_id: String}] } 

지금 내가 원하는 var name = mySchema2.name; 말과 링크 된 Schema1 개체의 이름을 얻을 수있을 것입니다 :
다음은 예입니다.
나는 Mongoose, Express 및 Node.js를 사용하고 있는데, 이것에 몽구스 '가상'을 사용하려했지만, res.send(myobject);은 어디서나 가상 속성을 볼 수 없다.

가장 좋은 방법은 무엇입니까?

답변

4

나는 질문을 게시 한 후에야 알지만 다른 사람들에게 도움이 될 수 있습니다.
이 참조를 사용하는 경우 임베디드 문서 사용을 고려할 수 있습니다. 임베디드 문서의 장점은 상위 문서를 쿼리 할 때 얻을 수 있으므로 추가 쿼리가 저장되지 않으며 상위 문서가 커지거나 커질 수 있다는 단점이 있으므로 사용해야하지만 신중하게 사용해야합니다.
다음은 간단한 임베디드 문서의 예입니다. 대신 추가 쿼리를 필요로 포스트 문서에 '주석'을 참조, 우리는 (코드는 비트 의사입니다)을 포함합니다 :

var postSchema = new Schema({ 
    author : {type : String}, 
    title : {type : String, required : true}, 
    content : {type : String, required : true}, 
    comment : { 
    owner : {type : String}, 
    subject : {type: String, required : true}, 
    content : {type String, required : true} 
    } 
}); 

MongoDB를 당신에게 의견을 조회 할 수있는 간단하고 편리한 방법을 수 있습니다 '필드를 점 문자로 나타냅니다.

myPostModel.find({ 'comment.subject' : /car*/ }).exec(function(err, result){ 
    Do some stuff with the result... 
}); 

참고 예제의 단순화를 위해 게시물에 코멘트 필드가 아니라고 : 자신의 주제는 '차'로 시작하는 예를 들어 우리는 다음과 같이 할 경우에만 의견을 조회하고자하는 경우 배열 (이 예에서는 게시물 당 하나의 주석이 허용됨). 그러나 그것이 배열 일지라도, mongo는 배열의 요소를 같은 방식으로 매우 우아하게 참조합니다.

0

mongodb에서 조인이 확장 성을 없애기 때문에 JOIN과 같은 단어가 없습니다. 그러나 대부분의 드라이버는 DBRef를 지원하며, 참조 된 데이터를로드하기위한 추가 요청 만하고 있습니다. 그래서 어디서나 사용하는 객체를로드하기 위해 직접 추가 요청을 할 수 있습니다.

어딘가에있는 객체를 앱에서 사용하는 경우 캐시에 있어야하는 객체처럼 들립니다. 하지만 mongodb는 객체를 메모리에로드 할 수있는 충분한 메모리가 있으면 어떤 종류의 캐시처럼 작동합니다. 따라서 객체를로드하기 위해 추가 요청을하는 것만으로 간단하게 유지할 수 있습니다.

1

몽구스의 DBRef를 돕는 몇 가지 플러그인이 있습니다.

mongoose-dbref은 DBRef 표준을 사용하기 때문에 시작하기에 좋습니다.

mongoose-plugins은 이전에 쓴 적이 있지만 약간 다른 방식으로 작동합니다.