【问题标题】:Delete all documents in a collection with Springdata mongo Query使用 Springdata mongo Query 删除集合中的所有文档
【发布时间】:2018-08-08 06:35:25
【问题描述】:

我想实现一个删除方法来删除集合中的所有文档。我正在使用带有 Spring Data 的 mongo db。这可以在 Mongo shell 中使用 db.myCollection.remove({}) 来完成。但是我想在我的数据访问层中编写一个方法来做到这一点。我没有在我的 Dao 类中使用 MongodbTemplate。我想知道如何使用 Query 做到这一点。

Query query = new Query();

谁能告诉我该怎么做。

【问题讨论】:

  • 你能告诉更多关于Query类导入的信息吗?是来自org.springframework.data.mongodb.repository 还是org.springframework.data.mongodb.core.query 包?
  • 你在使用 mongoTemplate 吗?

标签: mongodb spring-data-mongodb


【解决方案1】:

你可以直接使用MongoTemplate

mongoTemplate.remove(new Query(), collectionName);

【讨论】:

    【解决方案2】:

    如果您对架构进行了相当大的更改,最好删除该集合。 MongoTemplate.dropCollection(collectionName)。 但要求是删除您使用的所有文件 MongoTemplate.remove(new Query(), collectionName)CrudRepository.deleteAll()

    【讨论】:

      【解决方案3】:

      您可以删除该集合并重新创建它:

      mongoTemplate.dropCollection("collectionName");
      mongoTemplate.createCollection("collectionName");
      

      【讨论】:

        【解决方案4】:

        使用 MongoRepository 的 deleteAll()。在后台利用mongoTemplate调用remove方法。

        来自调用方法someRepository.deleteAll()

        正如其他答案所指出的那样,丢弃收集可能是有效的。为此,您需要直接使用 MongoTemplate 并使用实体类或集合名称调用 dropCollection

        【讨论】:

        • 根据我的要求,我不能放弃收藏。我需要保留收藏。所以我需要一种方法来删除集合中的整个文档而不删除集合。
        • 肯定用deleteAll第一个选项
        • 如果您使用 deleteAll() 它无法删除集合和架构。它只删除文档。如果方案中的任何更改不影响新架构。
        【解决方案5】:

        您最好删除整个集合(如果可能)而不是删除所有文档。为了性能和分配。

        您可以尝试以下方法:

            MongoClient mongoClient = new MongoClient(new ServerAddress("localhost", 27017));
            MongoDatabase db = mongoClient.getDatabase("test");
            MongoCollection collection = db.getCollection("test_collection");
            collection.drop();
        

        如果你确实想删除所有(我认为),而不是:

        collection.drop();
        

        使用:

        Bson filter = new Document();
        collection.deleteMany(filter);
        

        Query 是 spring-data-mongodb 的一部分,如果你不能使用MongoTemplate,可能Query 也无关紧要。

        【讨论】:

        • 根据我的要求,我不能放弃收藏。我需要保留收藏。所以我需要一种方法来删除集合中的整个文档而不删除集合。
        猜你喜欢
        • 2022-06-23
        • 1970-01-01
        • 1970-01-01
        • 2020-09-08
        • 2014-05-20
        • 2018-11-01
        • 1970-01-01
        相关资源
        最近更新 更多