【发布时间】:2016-08-02 04:49:47
【问题描述】:
使用com.couchbase.client, java-client 版本2.2.7 我无法使使用包含多个项目的IN 语句的n1ql 查询正常工作,请参阅下面的示例查询和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";
我尝试使用 (')、(") 和 (`) 设置 ids,例如:
ids = "'123', '456'";
ids = "\"123\" , \"456\";
ids = "`123`,`456`";
当有多个 id 时,这些都不起作用,但是如果只有一个,例如ids = "'123'",它就可以正常工作。如果我在终端上使用 CBQ 使用它,我的查询也有效。
我的问题是如何创建一个参数化的 N1QL 查询 一个 IN 语句可以包含多个项目吗?
【问题讨论】:
-
放错方括号应该是“and (id IN ([$ids]) )”