Couchbase N1QL Java SDK分页和排序问题

Couchbase N1QL Java SDK分页和排序问题,couchbase,n1ql,couchbase-java-api,Couchbase,N1ql,Couchbase Java Api,我最近开始使用couchbase。我使用SpringDataCouchbase在couchbase中插入JavaPOJO。因为SpringDataCouchbase项目不支持分页和排序,所以我尝试使用CouchbaseJava客户机2.2.0-dp2 我已经插入了8个用户,其中ID从1到8不等 我编写了以下代码来应用分页和排序 public void test() { int offset = 5 * (1 - 1); Statement statement =

我最近开始使用couchbase。我使用SpringDataCouchbase在couchbase中插入JavaPOJO。因为SpringDataCouchbase项目不支持分页和排序,所以我尝试使用CouchbaseJava客户机2.2.0-dp2

我已经插入了8个用户,其中ID从1到8不等

我编写了以下代码来应用分页和排序

public void test() {
        int offset = 5 * (1 - 1);
        Statement statement = select("*").from("test").where(x("_class").eq(s("com.test.rest.entity.User"))).orderBy(Sort.asc("id")).limit(5).offset(offset);
        log.info(statement.toString());
        Iterator<QueryRow> result = bucket.query(Query.simple(statement)).rows();

        while(result.hasNext()) {
            QueryRow doc = result.next();
            log.info("Document:: " + doc.value());
        }
}
它应该是test1到test5,尽管用户是随机选择的

看起来您希望按名字排序,因为id是由CB生成的

尝试将“id”替换为“firstname”,例如:

注意:我怀疑字段名“id”与元数据的id冲突(因此不会在json结果中返回)。尝试以不同的方式命名,如“_id”、“id”等

它应该是test1到test5,尽管用户是随机选择的

看起来您希望按名字排序,因为id是由CB生成的

尝试将“id”替换为“firstname”,例如:


注意:我怀疑字段名“id”与元数据的id冲突(因此不会在json结果中返回)。尝试将其命名为不同的名称,如“_id”、“id#”等。

在查看Spring Data Couchbase代码库之后,我了解了他们查询n1ql的方式。默认情况下,select(*)不选择id,因为id不是文档的一部分。所以

N1QL语句:

SELECT META(`test`).id AS _ID, META(`test`).cas AS _CAS, `test`.* FROM `test` WHERE `_class` = "com.test.rest.entity.User";
 Statement statement = select("META(`test`).id AS _ID, META(`test`).cas AS _CAS, `test`.*").from("test").where(x("_class").eq(s("com.test.rest.entity.User"))).orderBy(Sort.asc("_ID")).limit(5).offset(offset);
Couchbase Java客户端代码:

SELECT META(`test`).id AS _ID, META(`test`).cas AS _CAS, `test`.* FROM `test` WHERE `_class` = "com.test.rest.entity.User";
 Statement statement = select("META(`test`).id AS _ID, META(`test`).cas AS _CAS, `test`.*").from("test").where(x("_class").eq(s("com.test.rest.entity.User"))).orderBy(Sort.asc("_ID")).limit(5).offset(offset);

注意:orderBy(Sort.asc(“\u ID”))不是必需的。我只是把它留作示例。

在查看了Spring Data Couchbase代码库之后,我找出了他们查询n1ql的方式。默认情况下,select(*)不选择id,因为id不是文档的一部分。所以

N1QL语句:

SELECT META(`test`).id AS _ID, META(`test`).cas AS _CAS, `test`.* FROM `test` WHERE `_class` = "com.test.rest.entity.User";
 Statement statement = select("META(`test`).id AS _ID, META(`test`).cas AS _CAS, `test`.*").from("test").where(x("_class").eq(s("com.test.rest.entity.User"))).orderBy(Sort.asc("_ID")).limit(5).offset(offset);
Couchbase Java客户端代码:

SELECT META(`test`).id AS _ID, META(`test`).cas AS _CAS, `test`.* FROM `test` WHERE `_class` = "com.test.rest.entity.User";
 Statement statement = select("META(`test`).id AS _ID, META(`test`).cas AS _CAS, `test`.*").from("test").where(x("_class").eq(s("com.test.rest.entity.User"))).orderBy(Sort.asc("_ID")).limit(5).offset(offset);

注意:orderBy(Sort.asc(“\u ID”))不是必需的。我只是留着做样品。

没有。事实并非如此。创建记录时,我按顺序设置id,id很长。我在“test”之后添加了相同的id。我们也可以按订单,但记录仍然是随机的。明白。那么为什么id属性不存在于查询的输出中呢?也许这就是问题所在?很好。QueryRow类具有返回JsonObject的value()方法,该方法不包括id字段。我也尝试过在createdAt上进行排序,而不是像预期的那样进行分页。但是,我仍然想知道为什么id没有作为json的一部分返回。我想这会帮助我找到解决办法。谢谢你的帮助。真的很感激,不。事实并非如此。创建记录时,我按顺序设置id,id很长。我在“test”之后添加了相同的id。我们也可以按订单,但记录仍然是随机的。明白。那么为什么id属性不存在于查询的输出中呢?也许这就是问题所在?很好。QueryRow类具有返回JsonObject的value()方法,该方法不包括id字段。我也尝试过在createdAt上进行排序,而不是像预期的那样进行分页。但是,我仍然想知道为什么id没有作为json的一部分返回。我想这会帮助我找到解决办法。谢谢你的帮助。非常感谢。