使用 com.couchbase.client, java-client
version 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语句中获取多个项目?
1 回答
删除语句中
$ids
周围的括号并将实际ID放入placeholders
作为JsonArray
对象应该有效: