Couchbase Java API 未返回设定范围内的值
Couchbase Java API not returning values for set range
我在使用 Couchbase Java API 时遇到了一个奇怪的问题。我使用以下代码:
ViewQuery query = ViewQuery.from(BUCKET_NAME, GET_ENTITIES_VIEW_NAME);
...
// set companyStart, companyEnd as Strings
// set query.limit and query.skip
...
query.startKey(toJsonArray(companyStart, Long.toString(params.getStartDate().getTime())));
endKey(toJsonArray(companyEnd, Long.toString(params.getEndDate().getTime())));
ViewResult results;
results = bucket.query(query);
...
当我在 Couchbase 控制台中尝试上述开始和结束键(如 ["ROTOR"、146538100000])时,查询 returns 所有预期结果。
但是,Java API 结果是空的。
如果我注释掉 query.startKey 和 .endKey 行,它忠实地 returns 视图的所有结果。
这是我的观点:
function (doc, meta) {
if(doc.collectorData.documenttypes.terms[0] && doc.collectorData.documenttypes.terms[0]=='EAP:Article') {
emit([doc.collectorData.userdata.company,doc.timestamp], {"visitId":doc.visitId,"visitorId":doc.visitorId,"company":doc.collectorData.userdata.company,"timestamp":doc.timestamp, "userAgent":doc.userAgent, "pathInfo":doc.pathInfo, "channel":doc.collectorData.channel, "newVisit":doc.newVisit});
}
}
关于可能出错的任何提示?
您正在使用 Long.toString
,因此它与您在 couchbase 控制台中使用的不等同。
那相当于 ["ROTOR", "146538100000"]
。细微但有意义的区别!
尝试使用以下代码片段(我也明确使用了 JsonArray.from
,只是为了消除歧义):
query
.startKey(JsonArray.from(companyStart, params.getStartDate().getTime()))
.endKey(JsonArray.from(companyEnd, params.getEndDate().getTime()));
Simon 的提示非常有用。这个谜题有一个简单的解决方案:我忘记发布视图,而旧视图只有一个字段键,所以查询执行成功但没有返回任何内容! https://forums.couchbase.com/t/not-able-to-get-all-rows-returned-from-couchbase-view/5020/23 上某处的评论提供了启示。
我在使用 Couchbase Java API 时遇到了一个奇怪的问题。我使用以下代码:
ViewQuery query = ViewQuery.from(BUCKET_NAME, GET_ENTITIES_VIEW_NAME);
...
// set companyStart, companyEnd as Strings
// set query.limit and query.skip
...
query.startKey(toJsonArray(companyStart, Long.toString(params.getStartDate().getTime())));
endKey(toJsonArray(companyEnd, Long.toString(params.getEndDate().getTime())));
ViewResult results;
results = bucket.query(query);
...
当我在 Couchbase 控制台中尝试上述开始和结束键(如 ["ROTOR"、146538100000])时,查询 returns 所有预期结果。
但是,Java API 结果是空的。
如果我注释掉 query.startKey 和 .endKey 行,它忠实地 returns 视图的所有结果。
这是我的观点:
function (doc, meta) {
if(doc.collectorData.documenttypes.terms[0] && doc.collectorData.documenttypes.terms[0]=='EAP:Article') {
emit([doc.collectorData.userdata.company,doc.timestamp], {"visitId":doc.visitId,"visitorId":doc.visitorId,"company":doc.collectorData.userdata.company,"timestamp":doc.timestamp, "userAgent":doc.userAgent, "pathInfo":doc.pathInfo, "channel":doc.collectorData.channel, "newVisit":doc.newVisit});
}
}
关于可能出错的任何提示?
您正在使用 Long.toString
,因此它与您在 couchbase 控制台中使用的不等同。
那相当于 ["ROTOR", "146538100000"]
。细微但有意义的区别!
尝试使用以下代码片段(我也明确使用了 JsonArray.from
,只是为了消除歧义):
query
.startKey(JsonArray.from(companyStart, params.getStartDate().getTime()))
.endKey(JsonArray.from(companyEnd, params.getEndDate().getTime()));
Simon 的提示非常有用。这个谜题有一个简单的解决方案:我忘记发布视图,而旧视图只有一个字段键,所以查询执行成功但没有返回任何内容! https://forums.couchbase.com/t/not-able-to-get-all-rows-returned-from-couchbase-view/5020/23 上某处的评论提供了启示。