diff --git a/pom.xml b/pom.xml
index 75745189ed..e88e953616 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-mongodb-parent
- 1.7.0.BUILD-SNAPSHOT
+ 1.7.0.DATAMONGO-1068-SNAPSHOT
pom
Spring Data MongoDB
diff --git a/spring-data-mongodb-cross-store/pom.xml b/spring-data-mongodb-cross-store/pom.xml
index 40e8a0f253..e250833a2a 100644
--- a/spring-data-mongodb-cross-store/pom.xml
+++ b/spring-data-mongodb-cross-store/pom.xml
@@ -6,7 +6,7 @@
org.springframework.data
spring-data-mongodb-parent
- 1.7.0.BUILD-SNAPSHOT
+ 1.7.0.DATAMONGO-1068-SNAPSHOT
../pom.xml
@@ -48,7 +48,7 @@
org.springframework.data
spring-data-mongodb
- 1.7.0.BUILD-SNAPSHOT
+ 1.7.0.DATAMONGO-1068-SNAPSHOT
diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml
index 13110137b6..267c003696 100644
--- a/spring-data-mongodb-distribution/pom.xml
+++ b/spring-data-mongodb-distribution/pom.xml
@@ -13,7 +13,7 @@
org.springframework.data
spring-data-mongodb-parent
- 1.7.0.BUILD-SNAPSHOT
+ 1.7.0.DATAMONGO-1068-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb-log4j/pom.xml b/spring-data-mongodb-log4j/pom.xml
index 6ff09e4577..779ee82ad4 100644
--- a/spring-data-mongodb-log4j/pom.xml
+++ b/spring-data-mongodb-log4j/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-mongodb-parent
- 1.7.0.BUILD-SNAPSHOT
+ 1.7.0.DATAMONGO-1068-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml
index bfcacd66eb..e14d5286d8 100644
--- a/spring-data-mongodb/pom.xml
+++ b/spring-data-mongodb/pom.xml
@@ -11,7 +11,7 @@
org.springframework.data
spring-data-mongodb-parent
- 1.7.0.BUILD-SNAPSHOT
+ 1.7.0.DATAMONGO-1068-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Criteria.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Criteria.java
index f3e215c5ee..a57dee028c 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Criteria.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Criteria.java
@@ -31,7 +31,9 @@
import org.springframework.data.mongodb.InvalidMongoDbApiUsageException;
import org.springframework.data.mongodb.core.geo.Sphere;
import org.springframework.util.Assert;
+import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
@@ -515,8 +517,11 @@ public String getKey() {
* @see org.springframework.data.mongodb.core.query.CriteriaDefinition#getCriteriaObject()
*/
public DBObject getCriteriaObject() {
+
if (this.criteriaChain.size() == 1) {
return criteriaChain.get(0).getSingleCriteriaObject();
+ } else if (CollectionUtils.isEmpty(this.criteriaChain) && !CollectionUtils.isEmpty(this.criteria)) {
+ return getSingleCriteriaObject();
} else {
DBObject criteriaObject = new BasicDBObject();
for (Criteria c : this.criteriaChain) {
@@ -550,6 +555,13 @@ protected DBObject getSingleCriteriaObject() {
}
}
+ if (!StringUtils.hasText(this.key)) {
+ if (not) {
+ return new BasicDBObject("$not", dbo);
+ }
+ return dbo;
+ }
+
DBObject queryCriteria = new BasicDBObject();
if (!NOT_SET.equals(isValue)) {
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/CriteriaTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/CriteriaTests.java
index 5676f30a0b..a4fea2457c 100644
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/CriteriaTests.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/CriteriaTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2010-2013 the original author or authors.
+ * Copyright 2010-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -22,12 +22,14 @@
import org.springframework.data.mongodb.InvalidMongoDbApiUsageException;
import com.mongodb.BasicDBObject;
+import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.DBObject;
-/**
- * @author Oliver Gierke
- * @author Thomas Darimont
- */
+/**
+ * @author Oliver Gierke
+ * @author Thomas Darimont
+ * @author Christoph Strobl
+ */
public class CriteriaTests {
@Test
@@ -72,50 +74,94 @@ public void equalIfCriteriaMatches() {
assertThat(left, is(not(right)));
assertThat(right, is(not(left)));
}
-
- /**
- * @see DATAMONGO-507
- */
- @Test(expected = IllegalArgumentException.class)
- public void shouldThrowExceptionWhenTryingToNegateAndOperation() {
-
- new Criteria() //
- .not() //
- .andOperator(Criteria.where("delete").is(true).and("_id").is(42)); //
- }
-
- /**
- * @see DATAMONGO-507
- */
- @Test(expected = IllegalArgumentException.class)
- public void shouldThrowExceptionWhenTryingToNegateOrOperation() {
-
- new Criteria() //
- .not() //
- .orOperator(Criteria.where("delete").is(true).and("_id").is(42)); //
- }
-
- /**
- * @see DATAMONGO-507
- */
- @Test(expected = IllegalArgumentException.class)
- public void shouldThrowExceptionWhenTryingToNegateNorOperation() {
-
- new Criteria() //
- .not() //
- .norOperator(Criteria.where("delete").is(true).and("_id").is(42)); //
- }
-
- /**
- * @see DATAMONGO-507
- */
- @Test
- public void shouldNegateFollowingSimpleExpression() {
-
- Criteria c = Criteria.where("age").not().gt(18).and("status").is("student");
- DBObject co = c.getCriteriaObject();
-
- assertThat(co, is(notNullValue()));
- assertThat(co.toString(), is("{ \"age\" : { \"$not\" : { \"$gt\" : 18}} , \"status\" : \"student\"}"));
- }
+
+ /**
+ * @see DATAMONGO-507
+ */
+ @Test(expected = IllegalArgumentException.class)
+ public void shouldThrowExceptionWhenTryingToNegateAndOperation() {
+
+ new Criteria() //
+ .not() //
+ .andOperator(Criteria.where("delete").is(true).and("_id").is(42)); //
+ }
+
+ /**
+ * @see DATAMONGO-507
+ */
+ @Test(expected = IllegalArgumentException.class)
+ public void shouldThrowExceptionWhenTryingToNegateOrOperation() {
+
+ new Criteria() //
+ .not() //
+ .orOperator(Criteria.where("delete").is(true).and("_id").is(42)); //
+ }
+
+ /**
+ * @see DATAMONGO-507
+ */
+ @Test(expected = IllegalArgumentException.class)
+ public void shouldThrowExceptionWhenTryingToNegateNorOperation() {
+
+ new Criteria() //
+ .not() //
+ .norOperator(Criteria.where("delete").is(true).and("_id").is(42)); //
+ }
+
+ /**
+ * @see DATAMONGO-507
+ */
+ @Test
+ public void shouldNegateFollowingSimpleExpression() {
+
+ Criteria c = Criteria.where("age").not().gt(18).and("status").is("student");
+ DBObject co = c.getCriteriaObject();
+
+ assertThat(co, is(notNullValue()));
+ assertThat(co.toString(), is("{ \"age\" : { \"$not\" : { \"$gt\" : 18}} , \"status\" : \"student\"}"));
+ }
+
+ /**
+ * @see DATAMONGO-1068
+ */
+ @Test
+ public void getCriteriaObjectShouldReturnEmptyDBOWhenNoCriteriaSpecified() {
+
+ DBObject dbo = new Criteria().getCriteriaObject();
+
+ assertThat(dbo, equalTo(new BasicDBObjectBuilder().get()));
+ }
+
+ /**
+ * @see DATAMONGO-1068
+ */
+ @Test
+ public void getCriteriaObjectShouldUseCritieraValuesWhenNoKeyIsPresent() {
+
+ DBObject dbo = new Criteria().lt("foo").getCriteriaObject();
+
+ assertThat(dbo, equalTo(new BasicDBObjectBuilder().add("$lt", "foo").get()));
+ }
+
+ /**
+ * @see DATAMONGO-1068
+ */
+ @Test
+ public void getCriteriaObjectShouldUseCritieraValuesWhenNoKeyIsPresentButMultipleCriteriasPresent() {
+
+ DBObject dbo = new Criteria().lt("foo").gt("bar").getCriteriaObject();
+
+ assertThat(dbo, equalTo(new BasicDBObjectBuilder().add("$lt", "foo").add("$gt", "bar").get()));
+ }
+
+ /**
+ * @see DATAMONGO-1068
+ */
+ @Test
+ public void getCriteriaObjectShouldRespectNotWhenNoKeyPresent() {
+
+ DBObject dbo = new Criteria().lt("foo").not().getCriteriaObject();
+
+ assertThat(dbo, equalTo(new BasicDBObjectBuilder().add("$not", new BasicDBObject("$lt", "foo")).get()));
+ }
}