Couchbase Java API不返回设置范围的值

时间:2016-06-08 11:03:49

标签: java couchbase

我对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});
   }
}

关于可能出错的任何提示?

2 个答案:

答案 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上的帖子某处的评论提供了启示。