跳到主要内容

集合支持

ChatGPT-4o-mini 中英对照 Collection Support

Couchbase 支持 Scopes and Collections。本节文档介绍如何在 Spring Data Couchbase 中使用它。

try-cb-spring 示例应用程序是一个使用 Spring Data Couchbase 中的 Scopes 和 Collections 的工作示例。

2021 年 Couchbase Connect 关于 Spring Data 中 Collections 的演示可以在 仅演示带幻灯片的演示 中找到。

需求

  • Couchbase Server 7.0 或更高版本。

  • Spring Data Couchbase 4.3.1 或更高版本。

入门与配置

范围和集合规范

有几种机制用于指定作用域和集合,这些机制可以结合使用,或者一个机制可以覆盖另一个机制。首先,给出作用域和集合的一些定义。未指定的作用域表示使用默认作用域,同样,未指定的集合表示使用默认集合。只有三种作用域和集合的组合是有效的:(1) 默认作用域和默认集合;(2) 默认作用域和非默认集合;(3) 非默认作用域和非默认集合。不可能同时拥有非默认作用域和默认集合,因为非默认作用域不包含默认集合,也不能创建一个默认集合。

可以在配置中指定范围:

@Configuration
static class Config extends AbstractCouchbaseConfiguration {

// Usual Setup
@Override public String getConnectionString() { /* ... */ }

// optionally specify the scope in the Configuration
@Override
protected String getScopeName() {
return "myScope"; // or a variable etc.;
}

}
java

可以将 Scopes 和 Collections 作为注解指定在实体类和仓库上:

@Document
@Scope("travel")
@Collection("airport")
public class Airport {...
java
@Scope("travel")
@Collection("airport")
public interface AirportRepository extends CouchbaseRepository<Airport, String> ...
java

可以使用 inScope(scopeName) 和 inCollection(collectionName) 流式 API 在模板上指定作用域和集合:

List<Airport> airports = template.findByQuery(Airport.class).inScope("archived").all()
java

可以在扩展了 DynamicProxyable 的存储库上使用 withScope(scopeName) 和 withCollection(collectionName) API 指定 Scopes 和 Collections:

public interface AirportRepository extends CouchbaseRepository<Airport, String>, DynamicProxyable<AirportRepository>{...}
...
List<Airport> airports = airportRepository.withScope("archived").findByName(iata);
java

优先级顺序是:

  1. 模板流畅 API 的 inScope()/inCollection()

  2. 模板/仓库对象的 withScope()/withCollection()

  3. 仓库方法的注解

  4. 仓库接口的注解

  5. 实体对象的注解

  6. 配置的 getScope()