如果我使用此代码:
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