我使用Mongo集合来记录日志功能。我希望它是一个拖尾日志,所以它应该只有200个条目才能拖尾其他。功能类似于tail -f -n 200
在查询中使用limit
可以在查询方面产生类似的效果。
Posts = new Mongo.Collection('posts');
Posts.find({}, { limit: 200 });
但这不会删除集合中的旧条目。我不需要以前的参赛作品。
有没有办法用mongodb做到这一点?
答案 0 :(得分:2)
最好的方法是设置上限:http://docs.mongodb.org/manual/core/capped-collections/
MDG足够友好,可以将其包含在Meteor包装中,尽管它是内部的。
Foo = Mongo.collection('foo');
Foo._createCappedCollection(sizeInBytes, numOfDocs);
封顶集合的一个很好的例子是Oplog,它只是一个封顶集合的复制品。流星观看这些变化&当某些事情发生变化时,它会触发失效。你可以在Robomongo找到这个:System>local>collections>oplog.rs
如果它提供了你需要的一切,你甚至可能不需要自己制作。
或者,npm上有很多选项,所以你不必重新发明轮子。这篇文章有点过时,但值得一读:https://meteorhacks.com/logging-support-for-meteor
答案 1 :(得分:1)
只需使用percolate:synced-cron并编写一个删除旧帖子的小作业。
var nPosts = Posts.find().count();
if ( nPosts > 200 ){
Posts.remove({},{sort: {createdAt: 1}, limit: ( nPosts - 200 )});
}
或者,您可以使用mat33:collection-hooks并在每次插入后执行此修剪。