Collection Support

Couchbase 支持 Scopes and Collections。本部分记录了如何将它与 Spring Data Couchbase 配合使用。 try-cb-spring 示例应用程序是对在 Spring Data Couchbase 中使用范围和集合的实际演示。 可以在 Presentation OnlyPresentation with Slide Deck 中找到 2021 Couchbase Connect 关于 Spring Data 中集合的演示文稿

Requirements

  • Couchbase Server 7.0 或更高版本。

  • Spring Data Couchbase 4.3.1 或更高版本。

Getting Started & Configuration

Scope and Collection Specification

有一些指定作用域和集合的机制,它们可以结合使用,或其中的一种机制覆盖另一种机制。首先是对作用域和集合进行一些定义。未指定的作用域表示使用默认的作用域,同样的,未指定的集合表示使用默认的集合。只有三种有效的作用域和集合的组合。(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.;
    }

}

作用域和集合可以指定为实体类和存储库上的注释:

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

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

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

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

public interface AirportRepository extends CouchbaseRepository<Airport, String>, DynamicProxyable<AirportRepository>{...}
...
List<Airport> airports = airportRepository.withScope("archived").findByName(iata);
The order of precedence is:
  1. 模板 Fluent API 的 inScope()/inCollection()

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

  3. 存储库方法的注释形式

  4. 存储库接口的注释形式

  5. 实体对象的注释形式

  6. getScope() of the configuration