2012-04-11 5 views

답변

2

: 서버에서

  • 는, 그 이름의 컬렉션 백엔드 몽고 서버에 생성됩니다. 서버에서 해당 콜렉션의 메소드를 호출하면 은 정상적인 Mongo 작업으로 직접 변환됩니다.

  • 클라이언트에서 Minimongo 인스턴스가 만들어집니다. Minimongo는 본질적으로 순수한 JavaScript 인 에서 Mongo의 메모리 내, 비 영구적 인 구현입니다. 이 클라이언트가 작업중인 데이터베이스의 하위 집합 만 저장하는 로컬 캐시로 사용됩니다. 에 대한 클라이언트 (찾기)의 쿼리는 서버와 통신하지 않고이 캐시에서 직접 제공됩니다.

클라이언트에서 데이터베이스에 기록 할 때 (삽입, 업데이트, 삭제), 명령은 서버까지 제공하고 너무 거기에 실행 된 것, 동시에, 를 클라이언트에서 즉시 실행하고있다. livedata 패키지가이를 담당합니다. 에서 서버에 클라이언트로

서버 클라이언트를 설명

는 내가 무엇을 수집 할 수있는 것은 livedata과 몽고 - livedata 패키지입니다.

https://github.com/meteor/meteor/tree/master/packages/mongo-livedata

https://github.com/meteor/meteor/tree/master/packages/livedata

희망하는 데 도움이.

+0

내가 테스트하지 않은 한 가지는 Meteor의 * outside *에서 수행 된 MongoDB 콜렉션의 삽입이 클라이언트에 전파되는지 여부입니다. – fadedbee

+0

코드를 건너 뛰었지만 MongoDB가 Meteor에 콜렉션 업데이트에 대한 알림을 볼 수는 없습니다. – fadedbee

+3

@chrisdew 방금 MongoDB에 레코드를 삽입했고 브라우저에 나타났습니다. 그래서 나는 서버가 통보를받는다고 생각한다. –

19

당신은 이것을 위해 query.observe()을 원합니다. 태그 입력란에 Posts 컬렉션이 있고 important 태그가있는 소식이 추가되면 알림을 받고 싶다고 가정 해 보겠습니다. 각 브라우저 포스트 변경에 뭔가를하려는 경우

http://docs.meteor.com/#observe

// collection of posts that includes array of tags 
var Posts = new Meteor.Collection('posts'); 

// DB cursor to find all posts with 'important' in the tags array. 
var cursor = Posts.find({tags: 'important'}); 

// watch the cursor for changes 
var handle = cursor.observe({ 
    added: function (post) { ... }, // run when post is added 
    changed: function (post) { ... } // run when post is changed 
    removed: function (post) { ... } // run when post is removed 
}); 

당신은 클라이언트에서이 코드를 실행할 수 있습니다. 또는 중요한 게시물을 추가 할 때 팀에 이메일을 보내라고 말하면 서버에서 실행할 수 있습니다.

addedremoved은 문서가 아니라 쿼리를 참조하십시오. 기존 포스트 문서를 가지고

Posts.update(my_post_id, {$addToSet: {tags: 'important'}}); 

를 실행하는 경우 게시물은 질의 결과에 추가하기 때문에이는 '추가'콜백을 트리거합니다. 워드 프로세서

+7

이것은 아주 좋은 답변이지만이 질문에는 해당되지 않습니다. Meteor가 Meteor에서 변경 사항을 얻는 방법이 아니라 MongoDB에서 변경 사항 스트림을 얻는 방법을 묻습니다. – fadedbee

3

현재 Meteor은 실제로 하나의 인스턴스/프로세스로 잘 작동합니다. 이 경우 모든 쿼리가이 인스턴스를 통해 진행되며 다른 클라이언트로 다시 브로드 캐스트 할 수 있습니다. 또한, 외부 쿼리가 수행 한 데이터베이스 변경 사항에 대해 매 10 초마다 MongoDB를 폴링합니다. 1.0에 대한 계획은 확장 성을 개선하고 여러 인스턴스가 변경 사항에 대해 각자에게 알리는 것을 허용하기 위해서입니다.

반면에 DerbyJS는 Redis PubSub을 사용합니다.