Meteor を使用して、同じサーバー側データベース コレクションを共有するさまざまなクライアント側コレクションをどのように処理するのが最善かを考えています。次の例を考えてみましょう:User
コレクションがあり、クライアント側に友人であるユーザーのリストがあり、ユーザー データベース全体に対してクエリを実行し、クエリに一致するユーザー名のリストを返す検索機能があります。 .
Publish サーバー側メソッドでは、同じコレクションに対して異なるドキュメント セットを返す 2 つのクエリがあります。このデータは、クライアント側の 2 つの別々のコレクションに入れる必要がありますか? それとも、両方のクエリに一致するすべてのユーザー ドキュメントを同じコレクションにする必要がありますか? 後者の場合、サーバー側とクライアント側の両方のクエリに使用されるコードを複製しますか?
サーバー上:
Meteor.publish('searchResults', function(query){
var re = new RegExp(query, 'i')
return Users.find({ 'name' : {$regex: re}})
})
クライアントで:
Session.set('searchQuery', null)
Meteor.autosubscribe(function(){
Meteor.subscribe('searchResults', Session.get('searchQuery'))
})
Template.search.events = {
'keyup #user-search' : function(e){
Session.set('searchQuery', e.target.value)
}
}
_.extend(Template.search, {
searchResults: function() {
var re = new RegExp(Session.get('searchQuery'), 'i')
return Users.find({ 'name' : {$regex: re}})
}
})
これはもっともらしい解決策のように思えますが、最適な解決策ではありません。複数のサーバー側コレクションからの検索結果で構成される新しいクライアント側コレクションを作成したい場合はどうすればよいですか?