获取具有给定名称的集合。如果集合不存在, 创建了一个新的集合。
然而,似乎该集合实际上是在以后创建的。在getCollection()之后不存在。例如,当我插入一个doc时,就会创建它。
考虑一下:
myCollection.getDB().getCollection("dummy").getStats()
(com.mongodb.CommandResult) { "serverUsed" : "localhost/127.0.0.1:27801" , "ok" : 0.0 , "errmsg" : "ns not found"}
在我的情况下,我正在调用mapreduce作业,我传递了一个尚未存在的集合。这也会导致'{“serverUsed”:“localhost / 127.0.0.1:27801”,“ok”:0.0,“errmsg”:“ns不存在”}'。
我猜JavaDoc是不正确的。实际上这个集合后来很懒散。
如果是这样,那么实现立即创建集合的行为的最佳方法是什么?
我使用的是java驱动程序版本2.11.3
答案 0 :(得分:8)
你在某种程度上是正确的,如果你只使用db.getCollection("COLLECTION_NAME")
在java中,则不会创建集合。例如:
MongoClient mongoClient = new MongoClient("SERVER", 27017);
DB db = mongoClient.getDB("DB_NAME");
DBCollection coll1 = db.getCollection("COLLECTION_NAME");
此处不会创建集合,但如果您向其添加以下行,则将创建集合:
BasicDBObject document = new BasicDBObject();
document.put("user_id", "1");
System.out.println(coll1.insert(document));
在您的情况下,您可以检查集合是否已存在,然后根据需要创建它:
boolean collectionExists = db.collectionExists("COLLECTION_NAME");
if (collectionExists == false) {
db.createCollection("COLLECTION_NAME", null);
}