diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/query/BasicQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/query/BasicQuery.java index 549ae5092..19bfe22a7 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/query/BasicQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/query/BasicQuery.java @@ -51,7 +51,7 @@ public class BasicQuery extends Query { } @Override - public Query and(Criteria criteria) { + public Query addCriteria(Criteria criteria) { this.queryObject.putAll(criteria.getCriteriaObject()); return this; } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/query/Query.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/query/Query.java index 4078e92f7..afee29786 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/query/Query.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/query/Query.java @@ -36,10 +36,10 @@ public class Query { } public Query(Criteria criteria) { - and(criteria); + addCriteria(criteria); } - public Query and(Criteria criteria) { + public Query addCriteria(Criteria criteria) { this.criteria.put(criteria.getKey(), criteria); return this; } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoQueryCreator.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoQueryCreator.java index 7ffa34380..55ccaef8f 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoQueryCreator.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/MongoQueryCreator.java @@ -82,7 +82,7 @@ class MongoQueryCreator extends AbstractQueryCreator { Criteria criteria = from(part.getType(), where(part.getProperty().toDotPath()), iterator); - return base.and(criteria); + return base.addCriteria(criteria); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/query/QueryTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/query/QueryTests.java index ddec63659..bb3a7cd2a 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/query/QueryTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/document/mongodb/query/QueryTests.java @@ -24,14 +24,14 @@ public class QueryTests { @Test public void testSimpleQuery() { - Query q = new Query(where("name").is("Thomas")).and(where("age").lt(80)); + Query q = new Query(where("name").is("Thomas").and("age").lt(80)); String expected = "{ \"name\" : \"Thomas\" , \"age\" : { \"$lt\" : 80}}"; Assert.assertEquals(expected, q.getQueryObject().toString()); } @Test public void testQueryWithNot() { - Query q = new Query(where("name").is("Thomas")).and(where("age").not().mod(10, 0)); + Query q = new Query(where("name").is("Thomas").and("age").not().mod(10, 0)); String expected = "{ \"name\" : \"Thomas\" , \"age\" : { \"$not\" : { \"$mod\" : [ 10 , 0]}}}"; Assert.assertEquals(expected, q.getQueryObject().toString()); } @@ -39,7 +39,7 @@ public class QueryTests { @Test public void testOrQuery() { Query q = new OrQuery( - new Query(where("name").is("Sven")).and(where("age").lt(50)), + new Query(where("name").is("Sven").and("age").lt(50)), new Query(where("age").lt(50)), new BasicQuery("{'name' : 'Thomas'}") ); @@ -49,7 +49,7 @@ public class QueryTests { @Test public void testQueryWithLimit() { - Query q = new Query(where("name").gte("M").lte("T")).and(where("age").not().gt(22)); + Query q = new Query(where("name").gte("M").lte("T").and("age").not().gt(22)); q.limit(50); String expected = "{ \"name\" : { \"$gte\" : \"M\" , \"$lte\" : \"T\"} , \"age\" : { \"$not\" : { \"$gt\" : 22}}}"; Assert.assertEquals(expected, q.getQueryObject().toString()); @@ -58,7 +58,7 @@ public class QueryTests { @Test public void testQueryWithFieldsAndSlice() { - Query q = new Query(where("name").gte("M").lte("T")).and(where("age").not().gt(22)); + Query q = new Query(where("name").gte("M").lte("T").and("age").not().gt(22)); q.fields().exclude("address").include("name").slice("orders", 10); String expected = "{ \"name\" : { \"$gte\" : \"M\" , \"$lte\" : \"T\"} , \"age\" : { \"$not\" : { \"$gt\" : 22}}}"; @@ -69,7 +69,7 @@ public class QueryTests { @Test public void testBasicQuery() { - Query q = new BasicQuery("{ \"name\" : \"Thomas\"}").and(where("age").lt(80)); + Query q = new BasicQuery("{ \"name\" : \"Thomas\"}").addCriteria(where("age").lt(80)); String expected = "{ \"name\" : \"Thomas\" , \"age\" : { \"$lt\" : 80}}"; Assert.assertEquals(expected, q.getQueryObject().toString()); } @@ -83,10 +83,18 @@ public class QueryTests { @Test public void testComplexQueryWithMultipleChainedCriteria() { + Query q = new Query(where("name").regex("^T.*").and("age").gt(20).lt(80).and("city").in("Stockholm", "London", "New York")); + String expected = "{ \"name\" : { \"$regex\" : \"^T.*\"} , \"age\" : { \"$gt\" : 20 , \"$lt\" : 80} , " + + "\"city\" : { \"$in\" : [ \"Stockholm\" , \"London\" , \"New York\"]}}"; + Assert.assertEquals(expected, q.getQueryObject().toString()); + } + + @Test + public void testAddCriteriaWithComplexQueryWithMultipleChainedCriteria() { Query q1 = new Query(where("name").regex("^T.*").and("age").gt(20).lt(80).and("city").in("Stockholm", "London", "New York")); - Query q2 = new Query(where("name").regex("^T.*").and("age").gt(20).lt(80)).and(where("city").in("Stockholm", "London", "New York")); + Query q2 = new Query(where("name").regex("^T.*").and("age").gt(20).lt(80)).addCriteria(where("city").in("Stockholm", "London", "New York")); Assert.assertEquals(q1.getQueryObject().toString(), q2.getQueryObject().toString()); - Query q3 = new Query(where("name").regex("^T.*")).and(where("age").gt(20).lt(80)).and(where("city").in("Stockholm", "London", "New York")); + Query q3 = new Query(where("name").regex("^T.*")).addCriteria(where("age").gt(20).lt(80)).addCriteria(where("city").in("Stockholm", "London", "New York")); Assert.assertEquals(q1.getQueryObject().toString(), q3.getQueryObject().toString()); } diff --git a/src/docbkx/reference/mongodb.xml b/src/docbkx/reference/mongodb.xml index 9ee3577ec..b739007dc 100644 --- a/src/docbkx/reference/mongodb.xml +++ b/src/docbkx/reference/mongodb.xml @@ -961,7 +961,7 @@ ... List<Person> result = mongoTemplate.find( - new Query(where("age").lt(50)).and(where("accounts.balance").gt(1000.00d)), + new Query(where("age").lt(50).and("accounts.balance").gt(1000.00d)), Person.class); @@ -1076,10 +1076,12 @@ - void or - (List<Query> queries) - Creates an or query using the $or - operator for all of the provided queries + Criteria and + (String key) Adds a chained + Criteria with the specified + key to the current + Criteria and retuns the newly created + one @@ -1096,11 +1098,19 @@ - Query and + Query addCriteria (Criteria criteria) used to add additional criteria to the query + + void or (List<Query> + queries) Creates an or query using the + $or operator for all of the provided + queries + + Field fields () used to define fields to be