Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 如何使用反应式couchbase获取对象的嵌套列表?_Spring Boot_Spring Data_Reactive Programming_Couchbase - Fatal编程技术网

Spring boot 如何使用反应式couchbase获取对象的嵌套列表?

Spring boot 如何使用反应式couchbase获取对象的嵌套列表?,spring-boot,spring-data,reactive-programming,couchbase,Spring Boot,Spring Data,Reactive Programming,Couchbase,我最近开始回顾/学习一些关于反应式couchbase的知识,我正在尝试使用该技术和spring data和spring boot实现一个示例,我有以下模型: @Document public class Person { @Id private String id; @Field private String name; @Field private String lastName; @Field private List<A

我最近开始回顾/学习一些关于反应式couchbase的知识,我正在尝试使用该技术和spring data和spring boot实现一个示例,我有以下模型:

@Document
public class Person {
    @Id
    private String id;
    @Field
    private String name;
    @Field
    private String lastName;
    @Field
    private List<Address> address;
    // Getters & Setters
}

@Document
public class Address {
    @Id
    private String code;
    @Field
    private String mainStreet;
    @Field
    private String secondStreet;
    // Getters & Setters
}
当我呼叫服务时,例如:
http://localhost:8080/sample_couchbase/person/1/addresses
我想得到这个:

"address": [
    {
      "code": "A1",
      "mainStreet": "AAA",
      "secondStreet": "BBB",
      "phone": "11111",
      "place": "home"
    },
    {
      "code": "A2",
      "mainStreet": "CCC",
      "secondStreet": "DDD",
      "phone": "22222",
      "place": "work"
    },
    {
      "code": "A3",
      "mainStreet": "EEE",
      "secondStreet": "FFF",
      "phone": "33333",
      "place": "treasury"
    }
  ]
我设想在存储库中创建一个类似以下内容的方法:

Mono<Person> findById(String id);
Mono-findById(字符串id);

在服务层,我想象得到整个对象,然后按地址过滤,但这与我以前的做法有所不同,现在我使用Mono和Flux,而不是简单的对象或列表,所以我不知道怎么做,有人能给我一个主意吗?还是有更好的解决方案?

我找到了一种简单的方法来检索特定人员的地址,我使用了一个查询,其中我指定了要检索的内容:

@Query("SELECT addresses, META(sample).id as _ID, META(sample).cas as _CAS FROM `sample` WHERE id = $1")
Flux<Person> findAddressesByPerson(String id);
@Query(“选择地址,META(sample).id作为_-id,META(sample).cas作为_-cas来自'sample',其中id=$1”)
Flux FindAddressByPerson(字符串id);
我注意到有必要将
META(sample).id指定为_id
META(sample).cas指定为_cas
属性,以避免以下错误:

org.springframework.data.couchbase.core.CouchbaseQueryExecutionException:无法为N1QL到实体的映射检索足够的元数据,是否选择了_ID和_CAS?;嵌套异常是rx.exceptions.OnErrorThrowable$OnNextValue:OnError,同时发出onNext值:com.couchbase.client.java.query.DefaultAsyncN1qlQueryRow.class

如果您想更详细地了解实现,以下是示例:

{
  "id": "1",
  "name": "Scooby",
  "lastName": "Doo",
  "address": [
    {
      "code": "A1",
      "mainStreet": "AAA",
      "secondStreet": "BBB",
      "phone": "11111",
      "place": "home"
    },
    {
      "code": "A2",
      "mainStreet": "CCC",
      "secondStreet": "DDD",
      "phone": "22222",
      "place": "work"
    },
    {
      "code": "A3",
      "mainStreet": "EEE",
      "secondStreet": "FFF",
      "phone": "33333",
      "place": "treasury"
    }
  ],
  "classType": "com.jcalvopinam.model.Person"
}
"address": [
    {
      "code": "A1",
      "mainStreet": "AAA",
      "secondStreet": "BBB",
      "phone": "11111",
      "place": "home"
    },
    {
      "code": "A2",
      "mainStreet": "CCC",
      "secondStreet": "DDD",
      "phone": "22222",
      "place": "work"
    },
    {
      "code": "A3",
      "mainStreet": "EEE",
      "secondStreet": "FFF",
      "phone": "33333",
      "place": "treasury"
    }
  ]
Mono<Person> findById(String id);
@Query("SELECT addresses, META(sample).id as _ID, META(sample).cas as _CAS FROM `sample` WHERE id = $1")
Flux<Person> findAddressesByPerson(String id);