我使用autosubscribe获取最少50个最新聊天文档的列表。随着发布的消息越来越多,旧消息将通过autosubscribe从minimongo中删除。如何自动订阅以不删除我标记为活动的某些消息?
我知道我可以手动单独订阅一个" active"消息,但似乎不必要的费力。感谢。
编辑:活动标记仅在客户端,每个用户都可以选择他关心的消息,这是短暂的。用户将邮件标记为他回复的邮件,因此不应突然删除。
答案 0 :(得分:1)
你需要按时间排序(_id捕获它所插入的顺序,因此时间)以及状态,都是按降序排列。
服务器代码:
Meteor.publish("messages", function () {
return Messages.find({}, {sort: {active: -1, _id:-1}, limit: 50});
});
答案 1 :(得分:0)
在发布功能中,按状态排序。
Meteor.publish("messages", function () {
return Messages.find({}, {sort: {status: 1}, limit: 50});
});
答案 2 :(得分:0)
除非您的实施仅限于单个用户能够将行标记为活动,否则聊天行文档的标记需要使用活跃用户id。
这令人遗憾地导致需要单独订阅,即使它“似乎不必要的费力”
另一种“费力的方式”是制作所选活动消息的本地客户端集合副本。
答案 3 :(得分:0)
每个客户端,维护一个包含标记文档ID数组的会话变量:
Session.set('markedMessages', matchedDocs)
在您的发布语句中,使用与会话数组中的文档ID匹配的$ in语句,将其与$或语句结合使用以利用现有查询,限制/切片。
Meteor.publish("markedMessages", function () {
Messages.find({$or: [{ your_existing_query_goes_here },
{_id: { $in: Session.get('markedMessages')}} ] }).fetch()
})
注意,在您的手柄模板中,将消息ID与您的markedMessages会话进行比较,以确定该消息是否已由用户标记。