2

したがって、私の問題は、一時データを含むことを意図した生産データベースでのコレクションの自動作成です(ただし、論理的には、この一時ドキュメントで満たされることはありません)。それはなぜですか、どうすればこの動作を回避できますか?

たとえば、より正式な説明として、2 つのデータベースと、それらに含まれるコレクションがあります。

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-春にコレクションmyDocOneが作成されtemplate2ます...これは少し混乱します-次のコードがより良い概要を提供することを願っています.

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;
    }
}
4

1 に答える 1

2

これは現在不可能です。MongoDB のコレクションは、書き込まれるとすぐに遅延して作成され、空になっても自動的に削除されません。これまたはそれに関連する動作に関して、いくつかの未解決の JIRA の問題があります。具体的には次のとおりです。

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

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

空のコレクションを手動でクリーンアップする必要があります。ただし、すべてのデータベースをスキャンして空のコレクションを探し、それらをドロップする定期的なパス (オプションで、コレクション名に「temp」などの特定の文字列が前に付いている場合のみ) はうまくいきます。

于 2012-12-14T10:02:38.017 に答える