只允许mongo集合中包含x文档

时间:2015-08-12 16:50:32

标签: mongodb meteor

我使用Mongo集合来记录日志功能。我希望它是一个拖尾日志,所以它应该只有200个条目才能拖尾其他。功能类似于tail -f -n 200

在查询中使用limit可以在查询方面产生类似的效果。

Posts = new Mongo.Collection('posts');
Posts.find({}, { limit: 200 });

但这不会删除集合中的旧条目。我不需要以前的参赛作品。

有没有办法用mongodb做到这一点?

2 个答案:

答案 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并在每次插入后执行此修剪。