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 后:

  • 我只看到一个集合而不是两个集合
  • “UserProfile”集合被创建并且其中有一个对象
  • 未创建“公司”集合

运行#2之后:

  • 我现在看到了这两个系列
  • “UserProfile”现在有两个对象
  • "companies" 集合被创建并且其中有一个对象

我觉得很奇怪

所以我改变了我的 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
 }

我清理了我的数据库并运行了这段代码,每次它成功地创建了两个集合(需要时间......但可以完成工作)

我错过了什么吗?我应该等待的地方是否正在进行异步操作?

我知道一个更好的技巧是不要创建下一个集合......直到第一个集合的存在被确认

此代码不会一直运行...仅当我的应用程序第一次初始化时...它必须创建默认数据库并设置一堆集合

谢谢

注意:提问时如何插入换行符...

MongoDB 版本:2.0.6 windows 64 位(当前生产版本) Java 驱动程序:2.7.3

4

0 回答 0