如何使用查询注释删除 MongoRepository 中的项目?
Posted
技术标签:
【中文标题】如何使用查询注释删除 MongoRepository 中的项目?【英文标题】:How to delete items in MongoRepository using query annotation? 【发布时间】:2013-07-03 06:39:48 【问题描述】:我正在通过 MongoRepository 将 Spring Data 与 MongoDB 一起使用。
我想知道是否可以使用查询注释通过过滤器进行删除。我一直在寻找这里和谷歌,我找不到任何文档。
【问题讨论】:
【参考方案1】:@Query(value="'id' : $0", delete = true)
public Person deleteById (String id);
【讨论】:
谢谢!,为我工作。 (缺少“delete = true”) 你也可以使用@DeleteQuery,它不需要明确的delete=true设置。【参考方案2】:也许您可以使用存储库删除查询。这是来自documentation 的示例:
public interface PersonRepository extends MongoRepository<Person, String>
List <Person> deleteByLastname(String lastname);
Long deletePersonByLastname(String lastname);
使用返回类型 List 将在实际删除它们之前检索并返回所有匹配的文档。数值返回类型直接移除匹配的文档,返回移除的文档总数。
【讨论】:
这似乎是目前最新的,所以我认为这应该是最佳答案。【参考方案3】:不幸的是,spring data 没有提供任何基于查询删除文档的方法。而@Query
注解仅用于查找文档。
你可以做的是实现一个custom repository,它可以根据你的需要删除文档。
【讨论】:
@Query 现在可用于删除。您添加 @Query(value = "id: ?0", delete = true) 作为答案中提到的 Marcelo Pasut。【参考方案4】:如何删除查询中的id列表?
@Query(value="idList : $0", delete = true)
【讨论】:
我建议不要以复述问题的形式回答,不要在回答中引用问题。两者都将答案置于被误认为问题的风险(至少被懒惰的读者)。相反,请解释您的解决方案如何工作以及为什么它可以解决问题中描述的问题。无论如何,这在这里更受欢迎,因为它还有助于消除 *** 是免费代码编写服务的误解。【参考方案5】:试试这个,它对我有用。
@Repository
public interface DepartmentDao extends MongoRepository<Department, String>
@DeleteQuery
void deleteByDepartment(String department);
或
@Query(value="'_id' : ?0", delete = true)
public void deleteById(String id);
【讨论】:
【参考方案6】:存储库:
@Component
public interface SomeRepository extends MongoRepository<SomeObject, String>
@Query(" '_id' : ?0 ")
SomeObject findById(String _id);
某个类中的代码:
@Autowired
private SomeRepository pRepo;
public void delete(String id)
pRepo.delete(pRepo.findById(id));
【讨论】:
这将导致 2 个 mongo 查询,而不是单个 delete(criteria) 一个。以上是关于如何使用查询注释删除 MongoRepository 中的项目?的主要内容,如果未能解决你的问题,请参考以下文章