次のコードを検討してください。
Meteor.publish("Children", function (id) {
// Find all the items that are children of an item that I am sharing
//
var sharing = Items.find({$and : [{_id:id},{sharing:{$elemMatch: {user_id:this.userId}}}]}).fetch();
var shared_children = [];
sharing.forEach(function(share){
share.children.forEach(function(child){
shared_children.push(child.id);
});
});
return Items.find({_id:{$in : shared_children}});
});
私の Meteor.publish では、で使用する ID の配列を動的に生成してい.find
ます。データの手動クエリでは問題なく動作しますが、「共有」フィールドに新しい要素を追加すると、そのフィールドを追加したクライアントだけが更新を表示します。同じ要素を見ている他のクライアントは、サーバーから送信された更新された値を取得しません。彼らは、minimongo データベースにすでにあるもので更新するだけです。サーバー側のMongoDBには新しいエントリが表示されますが、それを作成したクライアント以外のクライアントではクエリを実行できません。
.find
計算された値の配列を使用しているため、依存関係システムが発行イベントを再度呼び出さないという問題はありますか?