有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

MongoDBJava的数据库。getCollection()不创建集合,即使javadoc这么说

报告指出:

Gets a collection with a given name. If the collection does not exist, a new collection is created.

但是,似乎该集合实际上是在稍后创建的。紧接着getCollection()不存在。例如,当插入一个文档时,它就会被创建

考虑如下:

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


共 (1) 个答案

  1. # 1 楼答案

    在某种程度上,您是对的,在java中,如果您只使用db.getCollection("COLLECTION_NAME"),则不会创建集合。例如:

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