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

15

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

Query query = new Query();

有人能告诉我怎么做吗?


你能多介绍一下导入的 Query 类吗?它是来自 org.springframework.data.mongodb.repository 还是 org.springframework.data.mongodb.core.query 包? - harshavmb
你正在使用mongoTemplate吗? - pvpkiran
6个回答

18
您可以直接使用MongoTemplate
mongoTemplate.remove(new Query(), collectionName);

1
这里唯一正确的答案 - Alec

9
使用MongoRepository的deleteAll()方法。在内部使用mongoTemplate调用remove方法。
从调用方法someRepository.deleteAll() 删除集合可能会更有效率,正如其他答案所指出的那样。为此,您需要直接使用MongoTemplate,并使用实体类或集合名称调用dropCollection

根据我的需求,我不能删除集合。我需要保留集合。因此,我需要一种方法来删除集合中的整个文档,而不是删除集合。 - Kepler
当然可以使用deleteAll作为第一个选项。 - s7vr
如果您使用deleteAll(),它可能无法删除集合和模式。它只会删除文档。如果方案有任何更改,不会影响新方案。 - Dr. X

9
您可以删除集合并重新创建它:
mongoTemplate.dropCollection("collectionName");
mongoTemplate.createCollection("collectionName");

嗨,这是一个不错的解决方案!但要记住,当你删除一个集合时,也会删除索引。 - undefined

7

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

你可以尝试以下操作:

    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的一部分,如果您不能使用,那么Query也是无关紧要的。


1
根据我的需求,我不能删除集合。我需要保留集合。因此,我需要一种在不删除集合的情况下删除集合中整个文档的方法。 - Kepler

1
如果模式有较大的更改,最好删除集合。 MongoTemplate.dropCollection(collectionName)。 但要求删除所有文档,可以使用 MongoTemplate.remove(new Query(), collectionName)CrudRepository.deleteAll()

0
如果要删除所有集合,也可以这样做:
mongoTemplate.collectionNames
        .forEach { mongoTemplate.dropCollection(it) }

如果集合上定义了索引,这可能会导致问题。当使用注释和Spring Data时,这些索引可能不会自动重新创建。 - mibollma
OP正在使用Java的Spring MongoTemplate。 - kommradHomer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接