兼职网站开发需求,成都高新seo,深圳高端网站设计开发,wordpress 文章去重【Spring连载】使用Spring Data访问 MongoDB----Template API 查询Documents 一、 查询集合中的Documents二 选择字段三、 其他查询选项3.1 Hints3.2 游标批大小Cursor Batch Size3.3 Collations3.4 读取首选项Read Preference3.5 Comments 四、查询Distinct值五、Geo-near 查询… 【Spring连载】使用Spring Data访问 MongoDB----Template API 查询Documents 一、 查询集合中的Documents二 选择字段三、 其他查询选项3.1 Hints3.2 游标批大小Cursor Batch Size3.3 Collations3.4 读取首选项Read Preference3.5 Comments 四、查询Distinct值五、Geo-near 查询六、GeoJSON 支持七、域类中的GeoJSON类型八、存储库查询方法中的GeoJSON 类型九、度量和距离计算十、全文检索十一、Query by Example十二、查询一个集合以匹配JSON Schema 你可以使用Query和Criteria类来表达查询。它们的方法名称反映了native MongoDB操作名称如lt、lte、is和其他名称。Query和Criteria类遵循fluent API风格因此你可以将多个方法标准和查询链接在一起同时拥有易于理解的代码。为了提高可读性静态导入可以避免在创建查询和条件实例时使用“new”关键字。你还可以使用BasicQuery从纯JSON字符串创建Query实例如下例所示 例1从纯JSON字符串创建查询实例 BasicQuery query new BasicQuery({ age : { $lt : 50 }, accounts.balance : { $gt : 1000.00 }});
ListPerson result mongoTemplate.find(query, Person.class);一、 查询集合中的Documents
在之前的章节我们看到了如何在MongoTemplate上使用findOne和findById方法来检索单个文档。这些方法以正确的方式返回单个域对象或者使用响应式reactive API Mono发出单个元素。我们还可以查询要作为域对象列表返回的documents集合。假设我们在一个集合中有许多具有姓名和年龄的Person对象作为documents存储并且每个人都有一个带有余额的内嵌的帐户document我们现在可以使用以下代码运行查询 使用MongoTemplate查询文档
// ...ListPerson result template.query(Person.class).matching(query(where(age).lt(50).and(accounts.balance).gt(1000.00d))).all();所有find方法都将Query对象作为参数。此对象定义用于执行查询的条件和选项。通过使用Criteria对象来指定条件该对象具有一个名为where的静态工厂方法来实例化新的Criteria。我们建议对org.springframework.data.mongodb.core.query.Criteria.where和Query.query使用静态导入使查询更具可读性。 查询应该返回符合指定条件的Person对象的List或Flux。本节的剩余部分列出了与MongoDB中提供的运算符相对应的Criteria和Query类的方法。大多数方法返回Criteria对象为API提供流畅的样式。 Criteria的方法 Criteria类提供了以下方法所有这些方法都对应于MongoDB中的运算符
Criteria all (Object o)使用$all运算符创建一个条件Criteria and (String key)将具有指定key的链式Criteria添加到当前Criteria并返回新创建的CriteriaCriteria andOperator (Criteria… criteria)使用$and运算符为所有提供的条件创建and查询Criteria andOperator (Collection Criteria criteria)使用$and运算符为所有提供的条件创建and查询Criteria elemMatch (Criteria c)使用$elemMatch运算符创建条件Criteria exists (boolean b)使用$exists运算符创建条件Criteria gt (Object o)使用$gt运算符创建条件Criteria gte (Object o)使用$gte运算符创建条件Criteria in (Object… o) 使用$in运算符为varargs参数创建一个条件。Criteria in (Collection? collection)使用$in运算符并使用集合创建条件Criteria is (Object o)使用字段匹配key:value创建条件。如果指定的值是一个document则字段的顺序和document中的完全相等性很重要。Criteria lt (Object o)使用$lt运算符创建条件Criteria lte (Object o)使用$lte运算符创建一个条件Criteria mod (Number value, Number remainder)使用$mod运算符创建一个条件Criteria ne (Object o)使用$ne运算符创建条件Criteria nin (Object… o)使用$nin运算符创建条件Criteria norOperator (Criteria… criteria)为所有提供的条件使用$nor运算符创建nor查询Criteria norOperatorCollectionCriteriaCriteria为所有提供的条件使用$nor运算符创建nor查询Criteria not ()使用$not元运算符创建一个条件该运算符直接影响后面的子句Criteria orOperator (Criteria… criteria)为所有提供的条件使用$or运算符创建or查询Criteria orOperator (Collection Criteria criteria)使用$或运算符为所有提供的条件创建或查询Criteria regex (String re)使用$regex创建条件Criteria sampleRate (double sampleRate)使用$sampleRate运算符创建条件Criteria size (int s)使用$size运算符创建条件Criteria type (int t)使用$type运算符创建条件Criteria matchingDocumentStructure (MongoJsonSchema schema)使用 $ jsonSchema 运算符为JSON schema criteria创建一个条件。$jsonSchema只能应用于查询的顶层而不能应用于特定属性。使用schema的properties属性来匹配嵌套字段。Criteria bits() 是调用MongoDB bitwise query operators如$bitsAllClear的网关。
Criteria类还提供了以下用于地理空间查询的方法。
Criteria within (Circle circle)使用$geoWithin $center操作符创建地理空间条件。Criteria within (Box box)使用$geoWithin $box操作创建地理空间条件。Criteria withinSphere (Circle circle)使用$geoWithin $center操作符创建地理空间条件。Criteria near (Point point)使用$near操作创建地理空间条件Criteria nearSphere (Point point)使用$nearSphere $center操作创建地理空间条件。Criteria minDistance (double minDistance)使用 $ minDistance 操作创建地理空间条件与$near一同使用。Criteria maxDistance (double maxDistance)使用 $ maxDistance 操作创建地理空间条件与$near一同使用。
Query类有一些附加的方法这些方法允许选择某些字段以及对结果进行limit和排序。 Query类的方法
Query addCriteria (Criteria criteria)用于向查询添加其他条件Field fields ()用于定义要包含在查询结果中的字段Query limit (int limit)用于将返回结果的大小限制为提供的limit 用于分页Query skipint skip用于跳过结果中提供的documents数用于分页Query with (Sort sort)用于为结果提供排序定义Query with (ScrollPosition position)用于提供滚动Scroll位置基于Offset或Keyset的分页以开始或恢复滚动
template API允许直接使用结果投影使你能够将查询映射到给定的域类型同时将操作结果投影到另一个域类型如下所述。
classtemplate.query(SWCharacter.class).as(Jedi.class)有关结果投影的更多信息请参阅Spring Data Projections的文档。
二 选择字段
MongoDB支持投影查询返回的字段。投影可以根据字段的名称包括和排除字段除非明确排除否则始终包括_id字段。 例2选择结果字段
public class Person {Id String id;String firstname;Field(last_name)String lastname;Address address;
}
query.fields().include(lastname); --------1query.fields().exclude(id).include(lastname) --------2query.fields().include(address) --------3query.fields().include(address.city) --------41. 通过“last_name”1,结果将同时包含_id和last_name。
2. 通过“_id”0“last_name”1,结果将仅包含last_name 。
3. 通过“address”1结果将包含_id和整个地址对象。
4. 通过“address.city”1,结果将包含_id和address对象该address仅包含city字段。从MongoDB 4.4开始你可以使用聚合表达式进行字段投影如下所示: 例3使用表达式计算结果字段
query.fields().project(MongoExpression.create($toUpper : $last_name)) --------1.as(last_name); --------2query.fields().project(StringOperators.valueOf(lastname).toUpper()) --------3.as(last_name);query.fields().project(AggregationSpELExpression.expressionOf(toUpper(lastname))) --------4.as(last_name);1. 使用native表达式。使用的字段名称必须引用数据库document中的字段名称。
2. 指定表达式结果投影到的字段名称。生成的字段名称未映射到域模型。
3. 使用聚合表达式。除了native MongoExpression之外字段名被映射到域模型中使用的字段名。
4. 将SpEL与AggregationExpression一起使用可以调用表达式函数。字段名称将映射到域模型中使用的字段名称。Query(fields“…”)允许在存储库级别使用表达式字段投影如MongoDB JSON-based Query Methods and Field Restriction中所述。
三、 其他查询选项
3.1 Hints
3.2 游标批大小Cursor Batch Size
3.3 Collations
3.4 读取首选项Read Preference
3.5 Comments
四、查询Distinct值
五、Geo-near 查询
六、GeoJSON 支持
七、域类中的GeoJSON类型
八、存储库查询方法中的GeoJSON 类型
九、度量和距离计算
十、全文检索
十一、Query by Example
十二、查询一个集合以匹配JSON Schema