diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java index 227ba0063..050d8dd87 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java @@ -156,6 +156,7 @@ import com.mongodb.client.result.UpdateResult; * @author Michael J. Simons * @author Roman Puchkovskiy * @author Yadhukrishna S Pai + * @author Anton Barkan */ public class MongoTemplate implements MongoOperations, ApplicationContextAware, IndexOperationsProvider { @@ -3289,6 +3290,10 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, cursorToUse = cursorToUse.batchSize(meta.getCursorBatchSize()); } + if (meta.getAllowDiskUse() != null) { + cursorToUse = cursorToUse.allowDiskUse(meta.getAllowDiskUse()); + } + for (Meta.CursorOption option : meta.getFlags()) { switch (option) { diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Query.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Query.java index ec63ac504..31dfd5343 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Query.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Query.java @@ -46,6 +46,7 @@ import org.springframework.util.Assert; * @author Thomas Darimont * @author Christoph Strobl * @author Mark Paluch + * @author Anton Barkan */ public class Query { @@ -372,6 +373,19 @@ public class Query { return this; } + /** + * Set a allowDiskUse to the query that is propagated to the profile log. + * + * @param allowDiskUse must not be {@literal null}. + * @return this. + * @see Meta#setAllowDiskUse(Boolean) + */ + public Query allowDiskUse(Boolean allowDiskUse) { + + meta.setAllowDiskUse(allowDiskUse); + return this; + } + /** * Set the number of documents to return in each response batch.
* Use {@literal 0 (zero)} for no limit. A negative limit closes the cursor after returning a single diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/QueryCursorPreparerUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/QueryCursorPreparerUnitTests.java index 1d48242d2..2030f25ea 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/QueryCursorPreparerUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/QueryCursorPreparerUnitTests.java @@ -45,6 +45,7 @@ import com.mongodb.client.FindIterable; * @author Oliver Gierke * @author Christoph Strobl * @author Mark Paluch + * @author Anton Barkan */ @ExtendWith(MockitoExtension.class) @MockitoSettings(strictness = Strictness.LENIENT) @@ -61,6 +62,7 @@ class QueryCursorPreparerUnitTests { when(factory.getCodecRegistry()).thenReturn(MongoClientSettings.getDefaultCodecRegistry()); when(cursor.batchSize(anyInt())).thenReturn(cursor); when(cursor.comment(anyString())).thenReturn(cursor); + when(cursor.allowDiskUse(anyBoolean())).thenReturn(cursor); when(cursor.maxTime(anyLong(), any())).thenReturn(cursor); when(cursor.hint(any())).thenReturn(cursor); when(cursor.noCursorTimeout(anyBoolean())).thenReturn(cursor); @@ -133,6 +135,15 @@ class QueryCursorPreparerUnitTests { verify(cursor).comment("spring data"); } + @Test + void appliesAllowDiskUseCorrectly() { + + Query query = query(where("foo").is("bar")).allowDiskUse(true); + prepare(query); + + verify(cursor).allowDiskUse(true); + } + // TODO // @Test // DATAMONGO-957 // public void appliesSnapshotCorrectly() {