[MONGODB] 유성이 게시 이해 / 구독
MONGODB유성이 게시 이해 / 구독
나는 프로젝트의 목록을 보여줍니다 최대 간단한 응용 프로그램 세트를 가지고있다. 나는 클라이언트에 모든 것을 전송하고 있지 않다 그래서 나는 autopublish 패키지를 제거했습니다.
<template name="projectsIndex">
{{#each projects}}
{{name}}
{{/each}}
</template>
autopublish이 설정되었을 때,이 모든 프로젝트를 표시합니다 :
if Meteor.isClient
Template.projectsIndex.projects = Projects.find()
그것을 제거와, 내가 추가 할 필요가 :
if Meteor.isServer
Meteor.publish "projects", ->
Projects.find()
if Meteor.isClient
Meteor.subscribe "projects"
Template.projectsIndex.projects = Projects.find()
그래서, 클라이언트 측 발견 () 메서드는 서버 측에서 게시 된 기록을 검색 말을 정확합니까? 난 단지 ()를 한 번 찾기를 호출해야처럼 내가 생각 때문에 나를 트립 됐어요.
해결법
-
==============================
1.컬렉션, 게시 및 구독이 설명서에는 종종 용어를 혼란에 의해 증폭 얻을 자주 혼동을 피하기 위해 그렇게로서,보다 상세하게 논의 할 수, 유성의 까다로운 영역입니다.
컬렉션, 게시 및 구독이 설명서에는 종종 용어를 혼란에 의해 증폭 얻을 자주 혼동을 피하기 위해 그렇게로서,보다 상세하게 논의 할 수, 유성의 까다로운 영역입니다.
다음의 사샤 그레이프 (DiscoverMeteor의 공동 저자) 하나의 슬라이드에 게시 및 구독을 설명 :
당신이 전화 찾기 (에 필요한 이유를 한 번 이상) 이해 제대로하려면 컬렉션, 게시 및 구독이 유성에서 작동하는 방법을 이해할 필요가있다 :
이 유성이 일을 매우 편리하게 어디 : 클라이언트에 Minimongo 컬렉션 기록 (문서)을 수정할 때, 유성 즉시 연관된 모든 템플릿을 업데이트 할 것입니다, 또한, 다시 서버에 변경 사항을 보낼 것이다 차례 MongoDB의에서 변경 사항을 저장하고 해당 문서를 포함하여 기록 세트에 가입 한 해당 클라이언트에게 전송합니다. 이것은 지연 보상이라고하며 유성의 일곱 핵심 원칙 중 하나입니다.
당신은 자신의 _id를 기반으로, 서버에 동일한 수집에서 온 경우 다른 기록에 끌어 오기는하지만, 모든 클라이언트에서 동일한 컬렉션 오게 구독 무리가있을 수 있습니다. 이것은 유성 문서로 명확하게 설명하지만, 암시되지 않습니다
대부분의 시간이다 - 어떤 설명하지 것은 명시 적으로 추가, 변경 및 제거, 또는 전혀 핸들러를 게시 사용하지 않을 때 발생하는 것입니다. 이 가장 일반적인 경우, 수집 인수는 (당연히) 1 단계에서 서버에 선언 된 MongoDB를 수집의 이름에서 가져온 그러나이 의미하는 것은 서로 다른 이름을 가진 다른 게시 및 구독을 가질 수 있으며, 모든 기록은 클라이언트에서 동일한 컬렉션 종료됩니다. 에서 문서를 나란히하고 클라이언트에서 클라이언트 작업 측에 다른 최상위 필드를 발송 기능을 게시 - 톱 레벨의 필드의 수준까지, 유성 구독이 겹칠 수 있도록 문서 사이에 일련의 조합을 수행 할을 담당 컬렉션 필드의 두 세트의 조합이 될 것입니다.
당신은 당신이 다른 일을하더라도, 서버와 클라이언트 모두에서 같은 방법을 정의하라의 블로그 게시물 수집을 가지고 :
BlogPosts = new Mongo.Collection('posts');
클라이언트에서 블로그 게시물은 기록에서 얻을 수 있습니다 :
이러한 모든 문서는 서버에 블로그 게시물의 컬렉션을 통해 MongoDB의의 게시물 수집에서오고, 클라이언트의 블로그 게시물 컬렉션 끝.
지금 당신은 () 두 번 이상 호출 찾아야 왜 우리가 이해할 수 - 두 번째는 클라이언트에있는 모든 구독 문서가 동일한 컬렉션 끝날 것이기 때문에, 당신은 당신이에 대한 관심 만 가져올 필요가있다. 예를 들어, 클라이언트의 가장 최근의 게시물을 얻으려면, 당신은 단순히 서버에서 쿼리를 거울 :
var recentPosts = BlogPosts.find({}, {sort: {date: -1}, limit: 10});
이것은 클라이언트가 지금까지받은 것을 모든 문서 / 기록에 상단의 게시물과 사용자의 게시물을 모두 커서를 반환합니다. (감사 제프리).
-
==============================
2.예, 클라이언트 측 발견은 ()는 Minimongo의 클라이언트에있는 문서를 반환합니다. 문서에서 :
예, 클라이언트 측 발견은 ()는 Minimongo의 클라이언트에있는 문서를 반환합니다. 문서에서 :
당신이 말하는 것처럼, 클라이언트가있을 것이다 문서 () 지정을 게시 할 수 있습니다.
-
==============================
3.여기에 기본 엄지 손가락의 규칙은 게시 및 가입 변수 이름은 클라이언트와 서버 측에서 동일해야합니다.
여기에 기본 엄지 손가락의 규칙은 게시 및 가입 변수 이름은 클라이언트와 서버 측에서 동일해야합니다.
MongoDB를 클라이언트 측에서 컬렉션 이름은 동일해야합니다.
내가 게시 사용하고 있다고 가정하고 코드의 모습 내 컬렉션라는 이름의 직원에 대한 가입
여기에 var 키워드의 사용은 (이 파일 컬렉션 현지하려면이 키워드를 사용) 선택 사항입니다.
CollectionNameOnServerSide = new Mongo.Collection('employees'); Meteor.publish('employeesPubSub', function() { return CollectionNameOnServerSide.find({}); });
CollectionNameOnClientSide = new Mongo.Collection('employees'); var employeesData = Meteor.subscribe('employeesPubSub'); Template.templateName.helpers({ 'subcribedDataNotAvailable' : function(){ return !employeesData.ready(); }, 'employeeNumbers' : () =>{ CollectionNameOnClientSide.find({'empId':1}); } });
여기에서 우리는 데이터를 클라이언트 측에서 준비가되어있는 경우 데이터가 다음 도우미 방법 employeeNumbers를 사용하여 직원 번호를 인쇄 할 준비가되었는지 알고 subcribedDataNotAvailable 헬퍼 방법을 사용할 수 있습니다.
<TEMPLATE name="templateName"> {{#if subcribedDataNotAvailable}} <h1> data loading ... </h1> {{else}} {{#each employeeNumbers }} {{this}} {{/each}} {{/if}} <TEMPLATE>
-
==============================
4.
// on the server Meteor.publish('posts', function() { return Posts.find(); }); // on the client Meteor.subscribe('posts');
from https://stackoverflow.com/questions/19826804/understanding-meteor-publish-subscribe by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB를 원자 "findOrCreate"findOne, 삽입하면 존재하지 않는,하지만하지 않습니다 갱신 (0) | 2019.12.01 |
---|---|
[MONGODB] MongoDB의 배열로부터 제거 개체 (0) | 2019.12.01 |
[MONGODB] 기본 HTML보기를 렌더링? (0) | 2019.12.01 |
[MONGODB] MongoDB를 선택 COUNT GROUP BY (0) | 2019.11.30 |
[MONGODB] MongoDB의 쿼리 도움말 - 하위 오브젝트의 모든 키의 값에 대한 쿼리 (0) | 2019.11.30 |