【问题标题】:How to create a collection in MongoDB using SPRING data如何使用 SPRING 数据在 MongoDB 中创建集合
【发布时间】:2015-10-06 14:36:02
【问题描述】:

我正在使用 Spring-Data-Mongo 访问我的 mongo 数据库上的 CRUD 操作。我执行以下行

DB db = mongoTemplate.getDb()

当处于调试模式时,我可以看到 db._collections 属性有 4 个值(我插入的集合)。但是当我查询

db.getCollectionNames()

我得到零收藏。这是为什么?当我这样做时也是如此

db.getCollection("collectionName")

但我知道集合确实存在,因为当我做类似的事情时

mongoTemplate.createCollection("collectionName");

我收到一个异常,说集合已经存在。谁能解释一下我可能缺少什么

【问题讨论】:

    标签: mongodb spring-data-mongodb


    【解决方案1】:

    MongoTemplate 提供了一些管理集合的方法。以下示例演示了其中的一些方法:

    DBCollection collection = null;
    if (!mongoTemplate.getCollectionNames().contains("collectionName")) {
        collection = mongoTemplate.createCollection("collectionName");
    }
    
    mongoTemplate.dropCollection("collectionName"); 
    

    在上面,getCollectionNames() 返回一组集合名称,dropCollection() 删除集合。

    【讨论】:

    • 这与已经在做的有什么不同?我已经提到 mongoTemplate.getCollectionNames() 导致零收集
    • 这是不同的,因为您使用来自DB db = mongoTemplate.getDb()db 对象来获取集合名称db.getCollectionNames() 而不是mongoTemplate 对象。
    • 我累了,还是没有运气。 ,mongotemplate.dropCollection("collectionName") 似乎工作。还有 mongoTemplate.collectionExists("collectionName") 返回 false,当我期望它返回 true 时
    【解决方案2】:

    使用 com.mongodb.client 和 com.mongodb 包的 MongoClient、MongoDatabase 和 MongoIterable。

    MongoClient client = MongoClient(<host>, port);
    MongoDatabase db = client.getDatabase(<Name of the database>);
    MongoIterable<String> = db.listCollectionNames();
    

    现在您可以遍历集合的所有名称。

    此外,您甚至可以使用 MongoCollection 类从指定的集合中获取 Document。 getCollection() 将在不存在时创建集合。

    MongoCollection<Document> collection = db.getCollection(<Collection name>);
    

    【讨论】:

      猜你喜欢
      • 2018-07-03
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      • 1970-01-01
      相关资源
      最近更新 更多