我对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控制台中尝试所述start和endKeys(如[" ROTOR",146538100000])时,查询将返回所有预期结果。
但是,使用Java API,结果为空。
如果我注释掉query.startKey和.endKey行,它会忠实地返回视图的所有结果。
以下是我的观点:
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});
}
}
关于可能出错的任何提示?
答案 0 :(得分:2)
您正在使用Long.toString
,因此它与您在couchbase控制台中使用的内容不同。
这相当于["ROTOR", "146538100000"]
。一个微妙但有意义的差异!
请尝试使用以下代码段(我也明确使用了JsonArray.from
,只是为了消除任何歧义):
query
.startKey(JsonArray.from(companyStart, params.getStartDate().getTime()))
.endKey(JsonArray.from(companyEnd, params.getEndDate().getTime()));
答案 1 :(得分:0)
Simon的提示最有帮助。这个谜团有一个简单的解决方案:我忘了发布视图,旧视图只有一个字段键,所以查询执行成功但没有返回任何内容!通过https://forums.couchbase.com/t/not-able-to-get-all-rows-returned-from-couchbase-view/5020/23上的帖子某处的评论提供了启示。