我有一个在mongo数据库中的集合,我追加了一些记录类型的信息。我试图找出最有效/最简单的方法来在流星应用程序中“尾巴” - 随着新文档被添加到集合中,它应该被发送给客户端,客户端应该将它追加到最后该集合中的当前文档集合。如何最好地通过流星“尾巴”在蒙戈的大集合?
客户端不会被发送,也不会保留集合中的所有文档,可能只是最后的约100个左右。
现在,从Mongo的角度来看,我没有看到说“收集中最后N个文档”的方式,因此我们根本不需要应用任何类型的文档。这似乎是最好的选择可用做天然的降序排序,则限制呼叫,所以像什么在the mongo doc on $natural
db.collection.find().sort({ $natural: -1 })
上市所以,在服务器端AFAICT出版这“最后的100个文件”流星之路收集会是这样的:现在
Meteor.publish('logmessages', function() {
return LogMessages.find({}, { sort: { $natural: -1 }, limit: 100 });
});
,从“尾-f”的角度来看,这似乎已经发出了“最后100个文件”到服务器的物权效力,但在错误的顺序这样做(最新的文件将在流星收集的开始,而不是最后)。
在客户端,这似乎意味着需要(不幸地)颠倒收集。现在,我没有在the Meteor Collection docs中看到reverse(),并按$ natural:1在客户端上进行排序(这似乎是合理的,因为没有真正的Mongo上下文)。在某些情况下,这些消息在文档中会有时间戳,客户端可以通过排序来得到“自然顺序”,但这似乎有点不合理。
在任何情况下,我觉得我可能会错过一个更简单的方法,通过流星从mongo发布一个活的'最后100个文档插入集合'集合。 :)
谢谢!
编辑 - 看起来像如果我在蒙戈更改收集到带盖的集合,那么服务器会create a tailable cursor有效(和快速)得到通知的添加到集合中的新文档。但是,我不清楚是否/如何通过Meteor集合让服务器这样做。
另一种看起来效率稍低但不需要切换到加盖集合(AFAICT)的替代方法是使用Smart Collections,它可以确定oplog的尾部,因此至少它是事件驱动的,而不是轮询,并且由于所有操作在源代码集合中将被插入,看起来它仍然非常高效。不幸的是,AFAICT我仍然留下排序问题,因为我没有看到如何将服务器端集合定义为'插入最后100个文档'。 :(
如果有一种在Mongo中创建一个集合作为另一个查询(“物化视图”的排序),那么也许我可以在Mongo中创建一个log-last-100“集合视图”,那么流星将能够发布/订阅整个伪集合?