Couchbase 参数化 N1QL 查询 IN 语句
Couchbase parameterized N1QL query IN statement
使用 com.couchbase.client, java-client
版本 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";
我尝试使用 (')、(") 和 (`) 设置 ids
,例如:
ids = "'123', '456'";
ids = "\"123\" , \"456\";
ids = "`123`,`456`";
None 当有多个 id 时,其中的
None 可以正常工作,但是如果只有一个,例如 ids = "'123'"
,它就可以正常工作。如果我在终端上使用 CBQ,我的查询也有效。
My question is this how do I crate a parameterized N1QL query which
can take multiple items in an IN statement?
删除语句中 $ids
周围的括号并将实际 ID 作为 JsonArray
对象放入 placeholders
应该可以工作:
JsonObject placeHolders = JsonObject.create()
.put("ids", JsonArray.from("id1", "id2", "id3"))
.put("startTime", startTime)
.put("endTime", endTime);
使用 com.couchbase.client, java-client
版本 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";
我尝试使用 (')、(") 和 (`) 设置 ids
,例如:
ids = "'123', '456'";
ids = "\"123\" , \"456\";
ids = "`123`,`456`";
None 当有多个 id 时,其中的
None 可以正常工作,但是如果只有一个,例如 ids = "'123'"
,它就可以正常工作。如果我在终端上使用 CBQ,我的查询也有效。
My question is this how do I crate a parameterized N1QL query which can take multiple items in an IN statement?
删除语句中 $ids
周围的括号并将实际 ID 作为 JsonArray
对象放入 placeholders
应该可以工作:
JsonObject placeHolders = JsonObject.create()
.put("ids", JsonArray.from("id1", "id2", "id3"))
.put("startTime", startTime)
.put("endTime", endTime);