2

autosubscribe を使用して、minimongo で最新の 50 件のチャット ドキュメントのリストを取得しています。より多くのメッセージが投稿されると、古いメッセージは autosubscribe によって minimongo から削除されます。アクティブとしてマークした特定のメッセージを削除しないように自動購読するにはどうすればよいですか?

「アクティブな」メッセージのリストを手動で個別に購読できることは知っていますが、それは不必要に面倒なようです。ありがとう。

編集: アクティブなマーキングはクライアント側のみで、各ユーザーは関心のあるメッセージを選択できます。これは一時的なものです。ユーザーはメッセージを返信中のメッセージとしてマークしているため、突然削除するべきではありません。

4

4 に答える 4

1

時間 (_id は挿入された順序をキャプチャするため時間) とステータスで、両方とも降順で並べ替える必要があります。

サーバーコード:

Meteor.publish("messages", function () {
    return Messages.find({}, {sort: {active: -1, _id:-1}, limit: 50});
});
于 2013-02-08T19:34:26.633 に答える
0

ラインをアクティブとしてマークできる単一のユーザーに実装が制限されていない限り、chat-line ドキュメントのマーキングにはアクティブなユーザーIDを使用する必要があります。

これは、「不必要に手間がかかるように見える」場合でも、別のサブスクリプションの必要性につながります。

もう 1 つの「骨の折れる方法」は、選択したアクティブ メッセージのローカル クライアント専用コレクション コピーを作成することです。

于 2013-02-15T22:45:09.027 に答える
0

発行機能で、ステータスで並べ替えます。

Meteor.publish("messages", function () {
    return Messages.find({}, {sort: {status: 1}, limit: 50});
});
于 2013-02-08T18:43:19.407 に答える
0

クライアントごとに、マークされたドキュメント ID の配列を含むセッション変数を維持します。

Session.set('markedMessages', matchingDocs)

パブリッシュ ステートメント内で、セッション配列内のドキュメント ID に一致する $in ステートメントを使用し、これを $or ステートメントと組み合わせて、既存のクエリ、制限/スライスを活用します。

Meteor.publish("markedMessages", function () {
  Messages.find({$or: [{ your_existing_query_goes_here }, 
    {_id: { $in: Session.get('markedMessages')}} ] }).fetch()
})

;

handlebars テンプレート内で、メッセージ ID をmarkedMessages セッションと比較して、メッセージがユーザーによってマークされたかどうかを識別します。

于 2013-02-17T03:56:57.303 に答える