Java 语句中的Couchbase参数化N1QL查询

Java 语句中的Couchbase参数化N1QL查询,java,couchbase,n1ql,Java,Couchbase,N1ql,使用com.couchbase.client,java客户端version2.2.7我无法使n1ql查询工作,该查询使用带有多个项的IN语句。请参见下面的示例查询和java代码 public int getCountForDuration(Long startTime, Long endTime, String ids){ JsonObject placeHolders = JsonObject.create().put("ids", ids).put("startTime", star

使用
com.couchbase.client,java客户端
version
2.2.7
我无法使n1ql查询工作,该查询使用带有多个项的IN语句。请参见下面的示例查询和java代码

public int getCountForDuration(Long startTime, Long endTime, String ids){
    JsonObject placeHolders = JsonObject.create().put("ids", ids).put("startTime", startTime).put("endTime", endTime);
    N1qlQuery query = N1qlQuery.parameterized(COUNT_STATEMENT, placeHolders)            
    N1qlQueryResult result = bucket.query(query);
    ...
}

public static final String COUNT_STATEMENT = "select count(*) as count " +
            "from bucketName " +
            "where docType = 'docId' " +
            "and (id IN [$ids]) " + <----- OFFENDING LINE
            "and publishTimestamp between $startTime and $endTime";
当有多个ID时,所有这些都不起作用,但是如果只有一个ID,如
ids=“'123'”
则可以正常工作。如果我在终端上使用CBQ,我的查询也可以工作

我的问题是如何包装一个参数化的N1QL查询 可以在in语句中接受多个项吗


删除语句中
$id
周围的括号,并将实际id作为
JsonArray
对象放入
占位符中,应该可以:

JsonObject placeHolders = JsonObject.create()
    .put("ids", JsonArray.from("id1", "id2", "id3"))
    .put("startTime", startTime)
    .put("endTime", endTime);

删除语句中
$id
周围的括号,并将实际id作为
JsonArray
对象放入
占位符中,应该可以:

JsonObject placeHolders = JsonObject.create()
    .put("ids", JsonArray.from("id1", "id2", "id3"))
    .put("startTime", startTime)
    .put("endTime", endTime);

放错括号的应该是“and(id IN([$id])”,放错括号的应该是“and(id IN([$id])”),“嘿,Simon,你能在这里看一下这个问题吗couchbase CollectionInfo日志,提前谢谢。我如何在Spring数据中设置这样的占位符?例如,我有:
@Query(“{n1ql.selectEntity}使用键$ids”)集合findByIdIn(@Param(“ids”)列表id)
但是通过Http调用它,我得到了“JsonArray不支持的类型:class java.util.ArrayList”
唯一能让它工作的方法是:
@Query(“{n1ql.selectEntity}USE KEYS$ids”)集合findByIdIn(@Param(“ids”)JsonArray ids)findAll(Iterable)
方法我使用的查询只是为了举例。一般来说,我可以使用自定义查询,其中需要将来自
@RepositoryRestResource
中http调用的
Iterable
映射到查询参数。因此,目前我看不到任何方法可以让它工作(其他人使用自定义objectMapper)。嘿,Simon,你能在这里查看一下couchbase collectInfo日志吗?提前谢谢。我如何在Spring数据中设置这样的占位符?例如,我有:
@Query(“{n1ql.selectEntity}使用键$ids”)集合findByIdIn(@Param(“ids”)列表id)
但是通过Http调用它,我得到了“JsonArray不支持的类型:class java.util.ArrayList”
唯一能让它工作的方法是:
@Query(“{n1ql.selectEntity}USE KEYS$ids”)集合findByIdIn(@Param(“ids”)JsonArray ids)findAll(Iterable)
方法我使用的查询只是为了举例。一般来说,我可以使用自定义查询,其中需要将来自
@RepositoryRestResource
中http调用的
Iterable
映射到查询参数。因此,目前我认为没有办法让它工作(其他人使用自定义objectMapper)。