java 的 DB.getCollection() 不会创建集合,即使 javadoc 是这样说的

标签 java mongodb

JavaDoc of DB.getCollection状态:

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 doesn't exist"}'。

我猜 JavaDoc 不正确。实际上该集合是稍后延迟创建的。

如果是这样,实现立即创建集合的行为的最佳方法是什么?

我正在使用 java 驱动程序版本 2.11.3

最佳答案

你在某种程度上是对的,在 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);
    }

关于java 的 DB.getCollection() 不会创建集合,即使 javadoc 是这样说的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19633195/

相关文章:

java - 如何使用 JSTL 写出列中的对象数组

java - Sonar Qube。为 Java 创建自定义规则

mongodb - 如何使用group by进行聚合并正确排序

mongodb - 如何将 Grails 域对象映射到特定的 mongodb 表名

mongodb - 使用 mongod.conf 时,Mongo auth 无法登录

java - 将图像加载到 Java 中

java - Spring MVC Http 状态 404

java - 使用警报管理器进行每日通知

java - java中的Mongo聚合

mongodb - 是否可以通过 $lookup 将字符串与 ObjectId 进行比较