Polishing.

Tweak Javadoc. Add since tag, reformat code. Simplify tests. Move documentation bits into the right place.

See #3726.
Original pull request: #3765.
This commit is contained in:
Mark Paluch
2021-08-27 09:34:40 +02:00
parent 62eb719b1e
commit f662d7ca0d
4 changed files with 21 additions and 19 deletions

View File

@@ -394,11 +394,15 @@ public class Criteria implements CriteriaDefinition {
/**
* Creates a criterion using the {@literal $sampleRate} operator.
*
* @param sampleRate sample rate to determine number of documents to be randomly selected from the input.
* @param sampleRate sample rate to determine number of documents to be randomly selected from the input. Must be
* between {@code 0} and {@code 1}.
* @return this.
* @see <a href="https://docs.mongodb.com/manual/reference/operator/aggregation/sampleRate/">MongoDB Query operator: $sampleRate</a>
* @see <a href="https://docs.mongodb.com/manual/reference/operator/aggregation/sampleRate/">MongoDB Query operator:
* $sampleRate</a>
* @since 3.3
*/
public Criteria sampleRate(double sampleRate) {
Assert.isTrue(sampleRate >= 0, "The sample rate must be greater than zero!");
Assert.isTrue(sampleRate <= 1, "The sample rate must not be greater than one!");

View File

@@ -40,19 +40,20 @@ import org.springframework.data.mongodb.core.schema.MongoJsonSchema;
* @author Ziemowit Stolarczyk
* @author Clément Petit
* @author Mark Paluch
* @author James McNee
*/
public class CriteriaUnitTests {
@Test
public void testSimpleCriteria() {
Criteria c = new Criteria("name").is("Bubba");
assertThat(c.getCriteriaObject()).isEqualTo(Document.parse("{ \"name\" : \"Bubba\"}"));
assertThat(c.getCriteriaObject()).isEqualTo("{ \"name\" : \"Bubba\"}");
}
@Test
public void testNotEqualCriteria() {
Criteria c = new Criteria("name").ne("Bubba");
assertThat(c.getCriteriaObject()).isEqualTo(Document.parse("{ \"name\" : { \"$ne\" : \"Bubba\"}}"));
assertThat(c.getCriteriaObject()).isEqualTo("{ \"name\" : { \"$ne\" : \"Bubba\"}}");
}
@Test
@@ -67,7 +68,7 @@ public class CriteriaUnitTests {
@Test
public void testChainedCriteria() {
Criteria c = new Criteria("name").is("Bubba").and("age").lt(21);
assertThat(c.getCriteriaObject()).isEqualTo(Document.parse("{ \"name\" : \"Bubba\" , \"age\" : { \"$lt\" : 21}}"));
assertThat(c.getCriteriaObject()).isEqualTo("{ \"name\" : \"Bubba\" , \"age\" : { \"$lt\" : 21}}");
}
@Test(expected = InvalidMongoDbApiUsageException.class)
@@ -153,13 +154,13 @@ public class CriteriaUnitTests {
Document co = c.getCriteriaObject();
assertThat(co).isNotNull();
assertThat(co).isEqualTo(Document.parse("{ \"age\" : { \"$not\" : { \"$gt\" : 18}} , \"status\" : \"student\"}"));
assertThat(co).isEqualTo("{ \"age\" : { \"$not\" : { \"$gt\" : 18}} , \"status\" : \"student\"}");
}
@Test // GH-3726
public void shouldBuildCorrectSampleRateOperation() {
Criteria c = new Criteria().sampleRate(0.4);
assertThat(c.getCriteriaObject()).isEqualTo(Document.parse("{ \"$sampleRate\" : 0.4 }"));
assertThat(c.getCriteriaObject()).isEqualTo("{ \"$sampleRate\" : 0.4 }");
}
@Test // GH-3726
@@ -302,7 +303,7 @@ public class CriteriaUnitTests {
Criteria numericBitmaskCriteria = new Criteria("field").bits().allClear(0b101);
assertThat(numericBitmaskCriteria.getCriteriaObject())
.isEqualTo(Document.parse("{ \"field\" : { \"$bitsAllClear\" : 5} }"));
.isEqualTo("{ \"field\" : { \"$bitsAllClear\" : 5} }");
}
@Test // DATAMONGO-1808
@@ -311,7 +312,7 @@ public class CriteriaUnitTests {
Criteria bitPositionsBitmaskCriteria = new Criteria("field").bits().allClear(Arrays.asList(0, 2));
assertThat(bitPositionsBitmaskCriteria.getCriteriaObject())
.isEqualTo(Document.parse("{ \"field\" : { \"$bitsAllClear\" : [ 0, 2 ]} }"));
.isEqualTo("{ \"field\" : { \"$bitsAllClear\" : [ 0, 2 ]} }");
}
@Test // DATAMONGO-1808
@@ -320,7 +321,7 @@ public class CriteriaUnitTests {
Criteria numericBitmaskCriteria = new Criteria("field").bits().allSet(0b101);
assertThat(numericBitmaskCriteria.getCriteriaObject())
.isEqualTo(Document.parse("{ \"field\" : { \"$bitsAllSet\" : 5} }"));
.isEqualTo("{ \"field\" : { \"$bitsAllSet\" : 5} }");
}
@Test // DATAMONGO-1808
@@ -329,7 +330,7 @@ public class CriteriaUnitTests {
Criteria bitPositionsBitmaskCriteria = new Criteria("field").bits().allSet(Arrays.asList(0, 2));
assertThat(bitPositionsBitmaskCriteria.getCriteriaObject())
.isEqualTo(Document.parse("{ \"field\" : { \"$bitsAllSet\" : [ 0, 2 ]} }"));
.isEqualTo("{ \"field\" : { \"$bitsAllSet\" : [ 0, 2 ]} }");
}
@Test // DATAMONGO-1808
@@ -338,7 +339,7 @@ public class CriteriaUnitTests {
Criteria numericBitmaskCriteria = new Criteria("field").bits().anyClear(0b101);
assertThat(numericBitmaskCriteria.getCriteriaObject())
.isEqualTo(Document.parse("{ \"field\" : { \"$bitsAnyClear\" : 5} }"));
.isEqualTo("{ \"field\" : { \"$bitsAnyClear\" : 5} }");
}
@Test // DATAMONGO-1808
@@ -347,7 +348,7 @@ public class CriteriaUnitTests {
Criteria bitPositionsBitmaskCriteria = new Criteria("field").bits().anyClear(Arrays.asList(0, 2));
assertThat(bitPositionsBitmaskCriteria.getCriteriaObject())
.isEqualTo(Document.parse("{ \"field\" : { \"$bitsAnyClear\" : [ 0, 2 ]} }"));
.isEqualTo("{ \"field\" : { \"$bitsAnyClear\" : [ 0, 2 ]} }");
}
@Test // DATAMONGO-1808
@@ -356,7 +357,7 @@ public class CriteriaUnitTests {
Criteria numericBitmaskCriteria = new Criteria("field").bits().anySet(0b101);
assertThat(numericBitmaskCriteria.getCriteriaObject())
.isEqualTo(Document.parse("{ \"field\" : { \"$bitsAnySet\" : 5} }"));
.isEqualTo("{ \"field\" : { \"$bitsAnySet\" : 5} }");
}
@Test // DATAMONGO-1808
@@ -365,7 +366,7 @@ public class CriteriaUnitTests {
Criteria bitPositionsBitmaskCriteria = new Criteria("field").bits().anySet(Arrays.asList(0, 2));
assertThat(bitPositionsBitmaskCriteria.getCriteriaObject())
.isEqualTo(Document.parse("{ \"field\" : { \"$bitsAnySet\" : [ 0, 2 ]} }"));
.isEqualTo("{ \"field\" : { \"$bitsAnySet\" : [ 0, 2 ]} }");
}
@Test // DATAMONGO-2002

View File

@@ -281,10 +281,6 @@ lower / upper bounds (`$gt` / `$gte` & `$lt` / `$lte`) according to `Range`
| `Exists`
| `findByLocationExists(boolean exists)`
| `{"location" : {"$exists" : exists }}`
| `SampleRate`
| `sampleRate(double sampleRate)`
| `{"$sampleRate" : sampleRate }`
|===
NOTE: If the property criterion compares a document, the order of the fields and exact equality in the document matters.

View File

@@ -1219,6 +1219,7 @@ The `Criteria` class provides the following methods, all of which correspond to
* `Criteria` *orOperator* `(Criteria... criteria)` Creates an or query using the `$or` operator for all of the provided criteria
* `Criteria` *orOperator* `(Collection<Criteria> criteria)` Creates an or query using the `$or` operator for all of the provided criteria
* `Criteria` *regex* `(String re)` Creates a criterion using a `$regex`
* `Criteria` *sampleRate* `(double sampleRate)` Creates a criterion using the `$sampleRate` operator
* `Criteria` *size* `(int s)` Creates a criterion using the `$size` operator
* `Criteria` *type* `(int t)` Creates a criterion using the `$type` operator
* `Criteria` *matchingDocumentStructure* `(MongoJsonSchema schema)` Creates a criterion using the `$jsonSchema` operator for <<mongo.jsonSchema,JSON schema criteria>>. `$jsonSchema` can only be applied on the top level of a query and not property specific. Use the `properties` attribute of the schema to match against nested fields.