SpringDataMongoDB

1.添加依赖

    Spring MongoDB支持需要MongoDB 2.6或更高版本,Java SE 8或更高版本。


2.MongoTemplate 查询方式

提供常见的Mongo操作。 包括文档和POJO之间的集成对象映射。

对于大多数任务,您会发现自己使用MongoTemplate或Repository支持,这些支持都利用丰富的映射功能。 MongoTemplate是寻找访问功能的地方,如递增计数器或临时CRUD操作。 MongoTemplate还提供了回调方法,以便您轻松掌握低级API工件(如com.mongo.DB)与MongoDB直接通信。 各种API构件的命名约定的目标是复制基础MongoDB Java驱动程序中的这些元素,以便将现有的知识轻松映射到Spring API上。


3.全文查询

因为MongoDB 2.6的全文查询可以使用$text操作符执行。在TextQuery和TextCriteria中可以使用特定于全文查询的方法和操作。


4.聚合框架支持

Aggregation

聚合表示MongoDB聚合操作,并保存聚合管道指令的描述。聚合是由调用适当的newAggregation(…)的静态工厂方法聚合类将旁边的AggregateOperation列表作为参数可选输入类。

实际的聚合操作是由MongoTemplate的聚合方法执行的,该方法还将所需的输出类作为参数。

AggregationOperation

AggregationOperation代表一个MongoDB聚合流水线操作,并描述了在这个聚合步骤中应该执行的处理。 尽管可以手动创建AggregationOperation,但是构建AggregateOperation的推荐方法是使用Aggregate类提供的静态工厂方法。

AggregationResults

AggregationResults是聚合操作结果的容器。 它以文档形式提供对原始聚合结果的访问,以及对执行聚合的映射对象和信息的访问。

支持的聚合操作

Pipeline Aggregation Operators

Group Aggregation Operators

Boolean Aggregation Operators

Comparison Aggregation Operators

Arithmetic Aggregation Operators

String Aggregation Operators

Date Aggregation Operators

Array Aggregation Operators

Conditional Aggregation Operators

Lookup Aggregation Operators

Pipeline Aggregation Operatorsbucket, bucketAuto, count, facet, geoNear, graphLookup, group, limit, lookup, match, project, replaceRoot, skip, sort, unwind

Set Aggregation OperatorssetEquals, setIntersection, setUnion, setDifference, setIsSubset, anyElementTrue, allElementsTrue

Group Aggregation OperatorsaddToSet, first, last, max, min, avg, push, sum, (*count), stdDevPop, stdDevSamp

Arithmetic Aggregation Operatorsabs, add (*via plus), ceil, divide, exp, floor, ln, log, log10, mod, multiply, pow, sqrt, subtract (*via minus), trunc

String Aggregation Operatorsconcat, substr, toLower, toUpper, stcasecmp, indexOfBytes, indexOfCP, split, strLenBytes, strLenCP, substrCP,

Comparison Aggregation Operatorseq (*via: is), gt, gte, lt, lte, ne

Array Aggregation OperatorsarrayElementAt, concatArrays, filter, in, indexOfArray, isArray, range, reverseArray, reduce, size, slice, zip

Literal Operatorsliteral

Date Aggregation OperatorsdayOfYear, dayOfMonth, dayOfWeek, year, month, week, hour, minute, second, millisecond, dateToString, isoDayOfWeek, isoWeek, isoWeekYear

Variable Operatorsmap

Conditional Aggregation Operatorscond, ifNull, switch

Type Aggregation Operatorstype

Faceted classification

MongoDB支持使用聚合框架的版本3.4分面分类。分面分类使用语义类别(通用或特定主题),将其组合在一起以创建完整的分类条目。流经聚合管道的文档被分类为桶。多方面的分类可以在同一组输入文档上启用各种汇总,而无需多次检索输入文档。

Buckets

Bucket操作根据指定的表达式和Bucket边界将传入文档分组为称为Buckets组。Bucket操作需要分组字段或分组表达式。它们可以通过Aggregate类的bucket()/ bucketAuto()方法来定义。 BucketOperation和BucketAutoOperation可以根据输入文档的聚合表达式来显示累积。 bucket操作可以通过流利的API通过with ...()方法,andOutput(String)方法以及通过as(String)方法进行别名的扩展。每个桶在输出中表示为一个文档。

BucketOperation采用一组定义的边界将传入文档分组到这些类别中。边界需要排序。

5.实例查询

通过实例查询(QBE)是一种简单易用的查询技术。它允许动态查询创建,不需要编写包含字段名的查询。实际上,通过示例查询并不需要使用特定于存储的查询语言编写查询。

Probe:这是一个具有填充字段的域对象的实例。

ExampleMatcher: ExampleMatcher 提供了如何匹配特定字段的详细信息。它可以在多个示例中重用。

Example:一个 Example 由 Probe 和 ExampleMatcher 组成。它用于创建查询。

实例查询,查询适合用例查询,但也有局限性:

什么时候使用:

使用一组静态或动态约束查询数据存储。

频繁地重构域对象,而不必担心破坏现有的查询。

与基础数据存储API独立工作。

限制:

不支持嵌套/分组的属性约束,如firstname = ?0或(firstname = ?1和lastname = ?2)

只支持开始/包含/结束/正则表达式匹配的字符串和精确匹配的其他类型

实例查询使用 repositories 执行。为此,让您的存储库接口扩展QueryByExampleExecutor。

public interfaceAbstractPeopleRepositoryextendsPagingAndSortingRepository,QueryByExampleExecutor{}

查询时需要先构建查询匹配器


6.审计

Spring Data提供了复杂的支持,以透明地跟踪谁创建或更改了一个实体,以及该事件发生的时间点。为了从该功能中获益,您必须为实体类提供审计元数据,这些元数据可以使用注释或实现接口来定义。

AuditorAware

如果您使用的是@CreatedBy或@LastModifiedBy,则审计基础结构需要了解当前的主体。为此,我们提供了一个AuditorAware SPI接口,您必须实现它来告诉基础设施当前用户或系统与应用程序交互的情况。泛型类型T定义了什么类型的属性是由@CreatedBy或@LastModifiedBy来定义的。

基于注解的审计元数据

我们提供@CreatedBy, @LastModifiedBy,以捕获创建或修改该实体的用户,以及@CreatedDate和@LastModifiedDate,以捕获发生此事件的时间点。

classCustomer{

 @CreatedBy

 privateUseruser;

 @CreatedDate

 privateDateTimecreatedDate;

 // … further properties omitted

}

如您所见,注释可以有选择地应用,这取决于您想要捕获的信息。对于捕获时间点的注释,可以使用类型JodaTimes DateTime的属性、遗留Java日期和日历、JDK8日期/时间类型以及long/ long。

基于接口的审计元数据

如果您不想使用注释来定义审计元数据,您可以让您的域类实现Auditable接口。它为所有审计属性公开setter方法。

还有一个方便的基类AbstractAuditable,您可以扩展它以避免手工实现接口方法的需要。请注意,这增加了您的域类与Spring数据的耦合,这些数据可能是您想要避免的。通常采用基于注释的定义审计元数据的方法,因为它的侵入性较低,且更灵活。




GitHub地址

https://github.com/shaopro/SpringBootMongoDB

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容

  • Spring Data Mongo 支持MongoDB引入的聚类框架。 基本概念 Aggregation : 聚...
    金刚_30bf阅读 8,002评论 0 1
  • 关于operators 官方参考文档:https://docs.mongodb.org/manual/refere...
    我看不见阅读 2,487评论 0 3
  • 概览一下大数据项目中可以使用的数据存储技术,聚焦于Couchbase 和 ElasticSearch,展示如何使用...
    abel_cao阅读 1,736评论 1 29
  • 一、MongoDB简介 1.概述 ​ MongoDB是一个基于分布式文件存储的数据库,由C++语言编写。旨在为WE...
    郑元吉阅读 974评论 0 2
  • 本文包括以下几个方面: –安全措施 – 部署架构 – 系统优化 – 索引设计 – 备份监控 – 模式设计 – 程序...
    张伟科阅读 3,950评论 0 9