创建 mongodb 集合时其中没有任何文档

标签 mongodb spring-data spring-data-mongodb

所以我的问题是在我的生产数据库中自动创建集合,旨在包含临时数据(但逻辑上永远不会填充任何此类临时文档)。这是为什么?我怎样才能避免这种行为?

例如,更正式的解释,我有两个数据库 - 及其包含的集合

productiveDB.coll1
productiveDB.coll2

temporaryDB.col3
temporaryDB.col4

但是当我开始存储数据时,Spring 会自动创建

productiveDB.coll1
productiveDB.coll2
productiveDB.col3
productiveDB.col4

郑重声明:我已经在使用 1.1.1.RELEASE。我创建了一个小测试用例,其中重复了此行为:两个文档(MyDocOne 和 MyDocTwo)都在自定义字段上包含 @Indexed 注释 - 它们还包含对象类型的字段。所以当我创建实体myDocOne and myDocTwo时- 设置myDocTwo.obj = myDocOne并坚持myDocTwo - spring 创建一个集合 myDocOnetemplate2 ...这有点令人困惑 - 我希望下面的代码能够提供更好的概述。

public static void main(String[] args ) {
    App app = new App();
    ApplicationContextLoader loader = new ApplicationContextLoader();
    loader.load(app, "applicationContext.xml");

    MongoTemplate template1;
    MongoTemplate template2;

    try {
        template1 = new MongoTemplate(new Mongo("localhost"), "tmp1");
        template1.setApplicationContext(loader.getApplicationContext());
        template2 = new MongoTemplate(new Mongo("localhost"), "tmp2");
        template2.setApplicationContext(loader.getApplicationContext());
        MyDocOne one = new MyDocOne("foo", "bar");
        template1.save(one);            
        MyDocTwo two = new MyDocTwo("foo", "baz");
        two.setAny(one);
        template2.save(two);

    } catch (Exception e) {
            e.printStackTrace();
    }
}

和文档:

@Document
public class MyDocOne {

    @Indexed
    String a;
    String b;

    public MyDocOne(String a, String b) {
        super();
        this.a = a;
        this.b = b;
    }
}

@Document
public class MyDocTwo {
    @Indexed
    String a;
    String b;
    Object any;

    public MyDocOne(String a, String b) {
        super();
        this.a = a;
        this.b = b;
    }

    public void setAny(Object any) {
        this.any = any;
    }
}

最佳答案

目前这是不可能的。 MongoDB 中的集合在写入后立即创建,并且在变空时不会自动删除。对于此问题或与之相关的行为,有几个 Unresolved JIRA 问题,具体来说:

https://jira.mongodb.org/browse/SERVER-610

https://jira.mongodb.org/browse/SERVER-3215

您必须手动清理空集合。不过,定期扫描所有数据库中是否有空集合并删除它们(可选地,仅当集合名称以特定字符串为前缀,例如“temp”时)即可达到目的。

关于创建 mongodb 集合时其中没有任何文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13875620/

相关文章:

java - Spring Data REST 查询中返回类型的控制名称

spring-data - 如何在响应式 Spring Data 中应用分页?

python - 删除 Mongoengine 中的所有集合

spring - 使用 Spring Data 存储库在 Mongodb 中获取最后创建的文档

java - Eclipse 将此代码视为错误,但它在 Maven 中编译得很好

hibernate - 在 EJB 计时器中使用 Spring Data JPA 存储库会导致 TransactionRequiredException

mongodb - Spring Data MongoDB 如何在实体上设置字段?

node.js - 如何使用 mongo/mongoose 连接远程数据库

javascript - meteor ,一对多关系&仅向发布中的客户端集合添加字段?

sql - NoSQL 数据库