나는 몇 달 전에 물었다. Meteor는 대답을 얻은 것으로 보인다.Meteor는 MongoDB 쿼리의 결과에 대한 업데이트를 어떻게 받습니까?
Which, if any, of the NoSQL databases can provide stream of *changes* to a query result set?
어떻게 유성은 MongoDB의 쿼리의 결과에 대한 업데이트를받을 수 있습니까?
감사합니다.
크리스.
나는 몇 달 전에 물었다. Meteor는 대답을 얻은 것으로 보인다.Meteor는 MongoDB 쿼리의 결과에 대한 업데이트를 어떻게 받습니까?
Which, if any, of the NoSQL databases can provide stream of *changes* to a query result set?
어떻게 유성은 MongoDB의 쿼리의 결과에 대한 업데이트를받을 수 있습니까?
감사합니다.
크리스.
: 서버에서
는, 그 이름의 컬렉션 백엔드 몽고 서버에 생성됩니다. 서버에서 해당 콜렉션의 메소드를 호출하면 은 정상적인 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
희망하는 데 도움이.
당신은 이것을 위해 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
});
당신은 클라이언트에서이 코드를 실행할 수 있습니다. 또는 중요한 게시물을 추가 할 때 팀에 이메일을 보내라고 말하면 서버에서 실행할 수 있습니다.
added
및 removed
은 문서가 아니라 쿼리를 참조하십시오. 기존 포스트 문서를 가지고
Posts.update(my_post_id, {$addToSet: {tags: 'important'}});
를 실행하는 경우 게시물은 질의 결과에 추가하기 때문에이는 '추가'콜백을 트리거합니다. 워드 프로세서
이것은 아주 좋은 답변이지만이 질문에는 해당되지 않습니다. Meteor가 Meteor에서 변경 사항을 얻는 방법이 아니라 MongoDB에서 변경 사항 스트림을 얻는 방법을 묻습니다. – fadedbee
현재 Meteor은 실제로 하나의 인스턴스/프로세스로 잘 작동합니다. 이 경우 모든 쿼리가이 인스턴스를 통해 진행되며 다른 클라이언트로 다시 브로드 캐스트 할 수 있습니다. 또한, 외부 쿼리가 수행 한 데이터베이스 변경 사항에 대해 매 10 초마다 MongoDB를 폴링합니다. 1.0에 대한 계획은 확장 성을 개선하고 여러 인스턴스가 변경 사항에 대해 각자에게 알리는 것을 허용하기 위해서입니다.
반면에 DerbyJS는 Redis PubSub을 사용합니다.
내가 테스트하지 않은 한 가지는 Meteor의 * outside *에서 수행 된 MongoDB 콜렉션의 삽입이 클라이언트에 전파되는지 여부입니다. – fadedbee
코드를 건너 뛰었지만 MongoDB가 Meteor에 콜렉션 업데이트에 대한 알림을 볼 수는 없습니다. – fadedbee
@chrisdew 방금 MongoDB에 레코드를 삽입했고 브라우저에 나타났습니다. 그래서 나는 서버가 통보를받는다고 생각한다. –