【发布时间】:2016-01-12 18:08:13
【问题描述】:
这是我的重点:用户可以访问不同的聊天室。当他们这样做时,如果尚未添加 ID,我会将聊天室 ID 推送到客户端的反应数组中。如果没有,我会重新运行一个自动运行,它将订阅客户在此会话中访问的每个聊天室的最后 50 条消息。
但我希望他只能收到每个聊天室的最后 50 条消息!
以前我有:
Meteor.publish("getChatMess", function(cids) {
if (!Array.isArray(cids))
cids = [cids];
return (ChatMess.find({ chatId: cids[i] }, { sort: { date: -1 }, limit: (75 * cids.length) } ));
});
这显然不符合我的需要,所以我这样做了:
Meteor.publish("getChatMess", function(cids) {
if (!Array.isArray(cids))
cids = [cids];
let i = -1,
cursors = [];
while (cids[++i])
{
cursors.push(ChatMess.find({ chatId: cids[i] }, { sort: { date: -1 }, limit: 50 } ));
}
return (cursors);
});
但是,Meteor 给我一个错误,因为我无法在一次推送中从同一个集合中返回多个光标。
我该如何解决?我知道我可以检查每个聊天,选择每个聊天的最后 50 条消息(或更少)的 id,并查询所有相应 ID 的 chatMess 集合,但是对于我想要的东西来说,它会非常繁重且未优化,特别是如果客户在会话中已经访问了几十个聊天室。
【问题讨论】:
标签: javascript node.js mongodb meteor