領先一步
VMware 提供培訓和認證,以加速您的進度。
了解更多Spring Data MongoDB 3.1 版本是受益於 Spring Data Commons 模組最近變更的模組之一,它利用該模組建立的基礎架構來引入反應式功能,例如稽核和 SpEL。以下程式碼片段讓您了解這對使用 SpEL 的宣告式 MongoDB 查詢意味著什麼
@Query("{ 'supervisor' : ?#{ hasRole('ROLE_ADMIN') " +
"? new Document('$regex', '*') : principal.name } }")
Flux<Person> findAllFilteredByRole();
@EnableReactiveMongoAuditing
使用通用基礎架構,因此您可以輕鬆追蹤變更。
@Configuration
@EnableReactiveMongoAuditing
static class AuditingConfig extends AbstractReactiveMongoConfiguration {
@Override
protected String getDatabaseName() {
return "database";
}
@Bean
public ReactiveAuditorAware<User> auditorProvider() {
return () -> ReactiveSecurityContextHolder.getContext()
.map(it -> ...);
}
}
目前版本的另一個重點是跟上 MongoDB Aggregation Framework 周圍的變更和增強功能,它現在允許您指定各種資料聚合操作,甚至包括將 JavaScript 函數作為管道一部分運行的可能性(如範例所示),從 MongoDB 參考文檔中重新建立平均書籍計算,如下所示
Accumulator accumulator = accumulatorBuilder()
.init("function() { return { count: 0, sum: 0 } }")
.accumulate("function(state, numCopies) { return { count: state.count + 1, sum: state.sum + numCopies } }")
.accumulateArgs("$copies")
.merge("function(state1, state2) { return { count: state1.count + state2.count, sum: state1.sum + state2.sum } }")
.finalize("function(state) { return (state.sum / state.count) }");
為了提高對大型資料集進行聚合的效能,MongoDB 允許您使用 AggregationOptions.builder().hint("…")
將索引提示新增至管道。
說到索引,雖然我們強烈建議以程式方式控制索引建立,但我們也理解宣告式索引定義的便利性。因此,我們將部分篩選器表達式新增至 @Indexed
和 @CompoundIndex
註釋,以使索引設定更加方便,如下所示
@CompoundIndex(name = "idx", def = "...",
partialFilter = "{'ssn': {'$exists': true}}")
public class Person {
//...
@Indexed(partialFilter = "{'rating': { $lt: 10 }}")
String lastname;
}
現在我們已經加快了聚合和索引的速度,現在是時候談談計算元素了。如您所知,我們切換了 MongoOperations.count(...)
(先前作用於快取的集合統計資訊)以運行聚合以進行精確計數,這是我們在 Multi Document Transactions 上努力的一部分。現在,在某些情況下,人們可能不需要精確的文件計數,但可以接受足夠接近的近似值。對於這些情況,您現在可以從 MongoOperations.estimatedCount(...)
取得估計值。
最後但並非最不重要的一點,我想提及適用於 Spring Data MongoDB 的正在孵化的 GraalVM native image 支援。請確保已安裝 Docker(僅為了方便起見,因為這將使您無需安裝 GraalVM 或 MongoDB),並查看展示 經典或 反應式 MongoDB 應用程式即時啟動的範例。
$ git clone https://github.com/spring-projects-experimental/spring-graalvm-native.git
$ cd spring-graalvm-native
$ git checkout 0.8.2
$ ./run-dev-container.sh
...@docker: cd spring-graalvm-native-samples/data-mongo
...@docker: ./build.sh
...@docker: ./target/data-mongodb