使用 Springdata mongo Query 删除集合中的所有文档

Kep*_*ler 13 mongodb spring-data-mongodb

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

Query query = new Query();
Run Code Online (Sandbox Code Playgroud)

谁能告诉我我该怎么做。

Moh*_*Ali 19

您可以MongoTemplate直接使用

mongoTemplate.remove(new Query(), collectionName);
Run Code Online (Sandbox Code Playgroud)


use*_*814 7

使用 MongoRepository 的deleteAll(). 在幕后利用 mongoTemplate 来调用该remove方法。

从调用方法 someRepository.deleteAll()

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


Ori*_*Dar 6

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

您可以尝试以下操作:

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

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

collection.drop();
Run Code Online (Sandbox Code Playgroud)

用:

Bson filter = new Document();
collection.deleteMany(filter);
Run Code Online (Sandbox Code Playgroud)

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


Ric*_*rdo 6

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

mongoTemplate.dropCollection("collectionName");
mongoTemplate.createCollection("collectionName");
Run Code Online (Sandbox Code Playgroud)