0

このコードを使用する場合:

private static void createDBAndCollections()
{
    Mongo mongo = new Mongo();
    DB db = mongo.getDB("dbname");

    BasicDBObject doc = new BasicDBObect();
    doc.put("somename","somevalue");

    ArrayList<String> collectionNames = new ArrayList<String>();
    collectionNames.add("userprofiles");
    collectionNames.add("companies");

    for(String collectionName : collectionNames)
    {
          DBCollection collection = db.getCollection(collectionName);
          collection.insert(doc);
    }
 }

実行前#1:データベースが存在しないデータベースが存在する場合でも、db.dropDatabase()を使用してコンソールから削除されます

実行#1の後

  • 2つのコレクションではなく、1つのコレクションしか表示されません
  • 「UserProfile」コレクションが作成され、1つのオブジェクトが含まれます
  • 「会社」コレクションは作成されません

実行#2の後:

  • 両方のコレクションが表示されます
  • 「UserProfile」に2つのオブジェクトが追加されました
  • 「companies」コレクションが作成され、1つのオブジェクトが含まれます

変だと思った

そこで、forループを変更して10秒の待機を含めました

for(String collectionName : collectionNames)
{
    DBCollection collection = db.getCollection(collectionName);
    collection.insert(doc);

    //wait for 10 seconds ... do not really know why ... but it works
    Thread.sleep(10 * 1000); //not showing try .. catch .. throw etc for this
 }

私はデータベースをクリーンアップしてこのコードを実行しましたそしてそれが2つのコレクションの作成に成功するたびに(時間がかかります...しかし仕事をします)

私は何かが足りないのですか?待つべき非同期操作がどこかで起こっていますか?

次のコレクションを作成しないためのより良いハックを知っています...最初のコレクションの存在が認められるまで

このコードは常に実行されるわけではありません...アプリが初めて初期化されるときのみ...デフォルトのデータベースを作成し、コレクションの束をセットアップする必要があります

ありがとう

注:質問をするときに改行を挿入するにはどうすればよいですか...

MongoDBバージョン:2.0.6 Windows 64ビット(現在の製品リリース)Javaドライバー:2.7.3

4

0 に答える 0