Spring数据mongo在Query中使用OR
Posted
技术标签:
【中文标题】Spring数据mongo在Query中使用OR【英文标题】:Spring data mongo use OR in Query 【发布时间】:2013-05-04 21:25:23 【问题描述】:让我们看看是否有人可以帮助解决这个问题。
我想使用 Spring Data mongodb 的 Repository,并且我想使用 Query 注释来过滤查找值 A=10 or A=20
@Query("A: 10, A:20")
findById(int id);
很显然,"," 尝试做一个 AND,我需要一个 OR。
有什么想法吗?
【问题讨论】:
【参考方案1】:或者,如果您使用的是 Criteria API
Criteria criteria = new Criteria();
criteria.orOperator(Criteria.where("A").is(10),Criteria.where("B").is(20));
Query query = new Query(criteria);
mongoOps.find(query, <Yourclass>.class, "collectionName");
【讨论】:
【参考方案2】:我认为这可能有效
@Query("'$or':[ 'A':10, 'B':20 ] ")
【讨论】:
@FakeUser @Query("$or : ['type':?0,'key':?1,'username':?2]") 是这是正确的查询吗? @mahendrakawde 查询对于通过type
或key
或username
进行搜索是正确的【参考方案3】:
你可以像这样使用 Spring Data MongoDB:
Query query = new Query();
query.addCriteria(
Criteria.where("").orOperator(
Criteria.where("A").is(10),
Criteria.where("B").is(20)
)
);
mongoTemplate.find(query, YourClazz.class, "CollectionName");
【讨论】:
【参考方案4】:您可以在 Spring Java 中使用 $in 运算符:
Criteria criteria = Criteria.where("field").in(listOfOptions);
【讨论】:
【参考方案5】:除了 helloJava 答案,如果您已经有其他条件的查询,您可以直接在 query.addCriteria 上添加 orOperation,如下所示。
query.addCriteria(new Criteria().orOperator(Criteria.where("fieldA").is(value),
Criteria.where("fieldB").is(value2)));
【讨论】:
【参考方案6】:您可以为此使用$in
运算符。我不知道 Java Spring,但是以您的示例为例,Query
部分应如下所示:
@Query("A: $in: [10, 20]")
【讨论】:
谢谢,但是注释结构在 Spring 数据存储库中不起作用,请其他人有其他想法?【参考方案7】:使用 Spring 的 BasicQuery:
DBObject queryCondition = new BasicDBObject();
BasicDBList values = new BasicDBList();
values.add(new BasicDBObject("A", 10));
values.add(new BasicDBObject("B", 20));
queryCondition.put("$or", values);
Query query = new BasicQuery(queryCondition);
mongoTemplate.find(query, clazz);
【讨论】:
请注意,这个结构除了创建的对象更少之外,如果您想从 OR 运算符中排除 NULL 条件,也很方便。 无法解析构造函数'BasicQuery(com.mongodb.DBObject)'【参考方案8】:Query query = new Query();
Criteria criteria = new Criteria();
criteria.orOperator(Criteria.where("category").is("your_Value_Category"),
Criteria.where("parentCategory").is("your_Value_ParentCategory"));
query.addCriteria(criteria);
mongoTemplate.find(query, YourPersistenceClass.class);
【讨论】:
【参考方案9】:可以使用 Spring 的 Query 结构:
Query query = new Query();
query.addCriteria(Criteria.where("id").is(10).orOperator(Criteria.where("id").is(20));
this.client.findOne(query, clazz);
【讨论】:
它不会起作用,因为使用上面,一个 id 已经固定,并且在那个基本子句中 or 将被应用。但是 OP 希望有一个直接的第一级 Or 子句。 我们可以申请 orOperator 几个条件吗?以上是关于Spring数据mongo在Query中使用OR的主要内容,如果未能解决你的问题,请参考以下文章
mongo中的高级查询之聚合操作(distinct,count,group)与数据去重