Added include() and exclude() methods that accept Collection in field projection.
Closes: #4625 Original Pull Request: #4668
This commit is contained in:
committed by
Christoph Strobl
parent
cb60aacabc
commit
d2a974462d
@@ -16,6 +16,7 @@
|
||||
package org.springframework.data.mongodb.core.query;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
@@ -35,6 +36,7 @@ import org.springframework.util.ObjectUtils;
|
||||
* @author Christoph Strobl
|
||||
* @author Mark Paluch
|
||||
* @author Owen Q
|
||||
* @author Kirill Egorov
|
||||
*/
|
||||
public class Field {
|
||||
|
||||
@@ -124,6 +126,17 @@ public class Field {
|
||||
*/
|
||||
public Field include(String... fields) {
|
||||
|
||||
return include(Arrays.asList(fields));
|
||||
}
|
||||
|
||||
/**
|
||||
* Include one or more {@code fields} to be returned by the query operation.
|
||||
*
|
||||
* @param fields the document field names to be included.
|
||||
* @return {@code this} field projection instance.
|
||||
*/
|
||||
public Field include(Collection<String> fields) {
|
||||
|
||||
Assert.notNull(fields, "Keys must not be null");
|
||||
|
||||
for (String key : fields) {
|
||||
@@ -136,7 +149,7 @@ public class Field {
|
||||
/**
|
||||
* Exclude a single {@code field} from being returned by the query operation.
|
||||
*
|
||||
* @param field the document field name to be included.
|
||||
* @param field the document field name to be excluded.
|
||||
* @return {@code this} field projection instance.
|
||||
*/
|
||||
public Field exclude(String field) {
|
||||
@@ -151,12 +164,23 @@ public class Field {
|
||||
/**
|
||||
* Exclude one or more {@code fields} from being returned by the query operation.
|
||||
*
|
||||
* @param fields the document field names to be included.
|
||||
* @param fields the document field names to be excluded.
|
||||
* @return {@code this} field projection instance.
|
||||
* @since 3.1
|
||||
*/
|
||||
public Field exclude(String... fields) {
|
||||
|
||||
return exclude(Arrays.asList(fields));
|
||||
}
|
||||
|
||||
/**
|
||||
* Exclude one or more {@code fields} from being returned by the query operation.
|
||||
*
|
||||
* @param fields the document field names to be excluded.
|
||||
* @return {@code this} field projection instance.
|
||||
*/
|
||||
public Field exclude(Collection<String> fields) {
|
||||
|
||||
Assert.notNull(fields, "Keys must not be null");
|
||||
|
||||
for (String key : fields) {
|
||||
|
||||
@@ -60,6 +60,7 @@ import com.mongodb.client.result.DeleteResult;
|
||||
* @author Mark Paluch
|
||||
* @author Mehran Behnam
|
||||
* @author Jens Schauder
|
||||
* @author Kirill Egorov
|
||||
*/
|
||||
public class SimpleMongoRepository<T, ID> implements MongoRepository<T, ID> {
|
||||
|
||||
@@ -485,7 +486,7 @@ public class SimpleMongoRepository<T, ID> implements MongoRepository<T, ID> {
|
||||
query.limit(getLimit());
|
||||
|
||||
if (!getFieldsToInclude().isEmpty()) {
|
||||
query.fields().include(getFieldsToInclude().toArray(new String[0]));
|
||||
query.fields().include(getFieldsToInclude());
|
||||
}
|
||||
|
||||
getReadPreference().ifPresent(query::withReadPreference);
|
||||
|
||||
@@ -63,6 +63,7 @@ import com.mongodb.client.result.DeleteResult;
|
||||
* @author Ruben J Garcia
|
||||
* @author Jens Schauder
|
||||
* @author Clément Petit
|
||||
* @author Kirill Egorov
|
||||
* @since 2.0
|
||||
*/
|
||||
public class SimpleReactiveMongoRepository<T, ID extends Serializable> implements ReactiveMongoRepository<T, ID> {
|
||||
@@ -555,7 +556,7 @@ public class SimpleReactiveMongoRepository<T, ID extends Serializable> implement
|
||||
query.limit(getLimit());
|
||||
|
||||
if (!getFieldsToInclude().isEmpty()) {
|
||||
query.fields().include(getFieldsToInclude().toArray(new String[0]));
|
||||
query.fields().include(getFieldsToInclude());
|
||||
}
|
||||
|
||||
readPreference.ifPresent(query::withReadPreference);
|
||||
|
||||
@@ -19,12 +19,15 @@ import static org.springframework.data.mongodb.test.util.Assertions.*;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link Field}.
|
||||
*
|
||||
* @author Oliver Gierke
|
||||
* @author Owen Q
|
||||
* @author Mark Paluch
|
||||
* @author Kirill Egorov
|
||||
*/
|
||||
class FieldUnitTests {
|
||||
|
||||
@@ -64,4 +67,22 @@ class FieldUnitTests {
|
||||
|
||||
assertThat(fields.getFieldsObject()).isEqualTo("{foo:0, bar:0, baz:0}");
|
||||
}
|
||||
|
||||
@Test // GH-4625
|
||||
void overriddenInclusionMethodsCreateEqualFields() {
|
||||
|
||||
Field left = new Field().include("foo", "bar");
|
||||
Field right = new Field().include(List.of("foo", "bar"));
|
||||
|
||||
assertThat(left).isEqualTo(right);
|
||||
}
|
||||
|
||||
@Test // GH-4625
|
||||
void overriddenExclusionMethodsCreateEqualFields() {
|
||||
|
||||
Field left = new Field().exclude("foo", "bar");
|
||||
Field right = new Field().exclude(List.of("foo", "bar"));
|
||||
|
||||
assertThat(left).isEqualTo(right);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user