4

我正在做一个简单的项目。我正在使用 SpringData 和 MongoDB。

一切都是完美的创建正常集合,但现在我必须注册信息,我的意思是日志功能。

所以我在 mongo 文档中读到了这个:

Capped 集合提供了一种在数据库中存储日志文档的高性能方法。在未索引的上限集合中插入对象将接近记录到文件系统的速度。此外,借助内置的 FIFO 机制,您不会面临使用过多磁盘空间进行日志记录的风险。

我想的很棒!这是我需要的,但我有疑问。可以用 SpringData 创建这种集合吗???我在 SpringData 文档中找不到任何内容。

有人对此有所了解吗?

谢谢

4

3 回答 3

6

有一个createCollection(…)CollectionOptions参数的方法,您可以在其中指定要设置上限的集合:

// The 'true' is setting it to capped
CollectionOptions options = new CollectionOptions(null, 50, true);
mongoOperations.createCollection("myCollection", options);

将这些选项暴露给@Document注释以在构建映射上下文时自动处理它们可能是一个好主意,但我们通常得到人们希望手动处理这些集合设置和索引操作而没有太多自动行为的反馈。随意打开一个 JIRA,以防您仍然希望看到它得到支持。

于 2011-10-26T16:13:12.800 回答
2

CollectionOptions options = new CollectionOptions(null, 5000, true)现在已弃用。相反,您应该使用以下代码:

CollectionOptions options = CollectionOptions.empty()
                    .capped().size(5242880)
                    .maxDocuments(5000)

不要忘记指定大小。有关详细信息,请参阅可尾游标

于 2019-02-27T09:37:47.383 回答
0

如果您有 spring-data 创建的集合(例如reservation:),您可以轻松地将其转换为 capped,就像这样:

db.runCommand({ convertToCapped: 'reservation', size: 9128 })

阅读 mongodb 手册:https ://docs.mongodb.com/manual/reference/command/convertToCapped/

ps:@Tailable注解非常性感,它可以帮助您跟踪该集合的更新并使用响应式编程原则对其更改做出反应

于 2018-01-07T04:51:04.440 回答