如何在Spring Boot中的存储库中的@Aggregation注释中添加“allowDiskUse”?

Lig*_*ami 3 spring aggregation mongodb mongorepository spring-boot

我在一个文件中写入了一个聚合,该聚合是从后端的文件MyRepository.kt调用的。MongoDataRetriever.kt

\n

MyRepository.kt文件:

\n
import org.springframework.data.mongodb.repository.Aggregation\nimport org.springframework.data.mongodb.repository.MongoRepository\n\n  @Aggregation(pipeline = [\n    "{ \\$match: { 'objName' : { \\$exists: true } } }",\n    "{ \\$sort: { 'addedDate': -1 } }"\n  ])\n  fun getLatestObjectsWithLatestData(): List<MyDocument>\n
Run Code Online (Sandbox Code Playgroud)\n

MongoDataRetriever.kt文件:

\n
  override fun getLatestObjects(): List<MyObj> {\n    return myRepository.getLatestObjectsWithLatestData().map { it.toMyObj() }\n  }\n
Run Code Online (Sandbox Code Playgroud)\n

上述aggregation失败并出现错误:

\n

message:\xc2\xa0"Command failed with error 16819 (Location16819): 'Sort exceeded memory limit of 104857600 bytes, but did not opt in to external sorting. Aborting operation. Pass allowDiskUse:true to opt in.' on serv...

\n

所以,似乎添加allowDiskUse = true或类似的东西是可能的解决方案,但如何在上面的注释中添加它?

\n

小智 6

您可以将 @Meta(allowDiskUse = true) 注释添加到您的方法中。

@Aggregation(pipeline = [
"{ \$match: { 'objName' : { \$exists: true } } }",
"{ \$sort: { 'addedDate': -1 } }"
])
@Meta(allowDiskUse = true)
fun getLatestObjectsWithLatestData(): List<MyDocument>
Run Code Online (Sandbox Code Playgroud)