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