使用spring-mongodb清除mongodb数据库

5

和我之前在stackoverflow上的许多人一样,我希望为我的mongodb应用程序编写junit测试。为此,我让一个实例运行,以便我的测试可以连接。但是我想确保在开始测试时数据库处于空状态。

由于我使用了spring-mongodb、spring-test和所有有趣的spring-things,我希望找到一个可以为我完成这项工作的配置,但到目前为止还没有成功。

有人能给我一个提示如何以清洁的方式实现这一点吗?我的想法是使用InitializingBean来完成这个任务。但我对此解决方案并不满意。有什么建议吗?


对于PHPUnit,我的做法是创建一个名为PHPUnit_tests的新数据库,然后在每个测试结束时删除它。Java应该在表示MongoDB数据库的数据库类中有类似的功能。 - Sammaye
4个回答

9

试试这个:

@Autowired
org.springframework.data.mongodb.core.MongoTemplate mongoTemplate;

.....
mongoTemplate.getDb().dropDatabase();

3
新版本中,应该使用 mongoTemplate.getDb().drop() 来进行操作。 - lkamal

5

mongoTemplate.getDb().dropDatabase();可以帮助你清空数据库,但是如果你使用了索引,比如通过spring-data-mongodb的@Index注解,dropDatabase()会一并删除索引。

我的建议是清理文档:

private void cleanUp() {
        for (String collectionName : mongoTemplate.getCollectionNames()) {
            if (!collectionName.startsWith("system.")) {
                mongoTemplate.getCollection(collectionName).remove(new BasicDBObject());
            }
        }
}

谢谢,我忘记了索引,花了一个小时才发现为什么在@AfterEach中添加数据库删除代码后重复异常消失了。 - roma2341

2
这是非废弃的答案: mongoTemplate.getDb().drop();

1

第一个

private @Autowired Mongo mongo;
private @Autowired MongoDbFactory mongoDbFactory;

那么

mongo.dropDatabase(mongoDbFactory.getDb().getName());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接