【问题标题】:how to query on particular keys in couchbase through java client?如何通过java客户端查询couchbase中的特定键?
【发布时间】:2013-06-27 12:55:42
【问题描述】:

我是 CouchBase 的新手。我有几个简单的文件:

1. {
  "docType": "DeviceData",
  "id": "57 0F 75 00 C8 0B@2013-06-26 23:59:38.979",
  "time": 1372271378979,
  "group": "London"
}

2. {
  "docType": "DeviceData",
  "id": "57 0F 75 00 C8 0B@2013-06-27 10:02:46.197",
  "time": 1372307566197,
  "group": "Bristol"
}

3. {
  "docType": "DeviceData",
  "id": "57 0F 75 00 C8 0B@2013-06-27 10:03:36.4",
  "time": 1372307616400,
  "group": "Bristol"
}

我需要查询组和时间。例如,我想获取 group = Bristol 的所有文档,时间从 1372307616100 到 1372307616500。所以我应该得到 3 个文档中的 2 个。

所以我将视图创建为:

function (doc, meta) {
  if(doc.docType == "DeviceData")
  emit([doc.group, doc.time], doc);
}

在java代码中设置查询如下:

String str = "[\"Bristol\", 1372307566100]";
        String end = "[\"Bristol\", 1372307616500]";
        query.setRange(str, end);
        List<DeviceData> deviceData = cbStore.getView("getDevices", DeviceData.class, query);

但是得到零个文档。

请让我知道我做错了什么吗?需要帮助谢谢。

*编辑: 我尝试使用 complexkeys 以及如下所示,但没有运气。

ComplexKey startKey = ComplexKey.of("Bristol", "1372307566100");
ComplexKey endKey = ComplexKey.of("Bristol", "1372307616500");

【问题讨论】:

  • 1.尝试检查使用了 Stale 参数的什么值。并尝试将其设置为Stale=false。 2. 检查您是否发布了您的观点。 3. 在 Couchbase Web 管理面板中检查具有相同参数的视图。如果它返回正确的值,则问题出在您的应用程序中,而不是 couchbase。
  • 我已经发布了视图,我可以在尝试使用 REST url 时获取记录。
  • 那么Stale 参数呢?我记得它应该像query.setStale(Stale stale)。 PS:顺便说一句,不要在您的视图中包含文档,例如:emit([doc.group, doc.time], doc);。最好使用emit([doc.group, doc.time], null); 并将IncludeDocs 添加到您的查询中:query.setIncludeDocs(boolean include)。

标签: java couchbase


【解决方案1】:

问题是在你的对象中时间很长,而不是字符串:

query.setStale(Stale.FALSE);
long firstParameter=1372307566197l;
long secondParameter=1372307616400l;
//["Bristol",1372307566197]
ComplexKey startKey = ComplexKey.of("Bristol", firstParameter);
//["Bristol",1372307616400]
ComplexKey endKey = ComplexKey.of("Bristol",  secondParameter);
query.setRange(startKey, endKey);
ViewResponse result = client.query(view, query);
Iterator<ViewRow> iter = result.iterator();
while(iter.hasNext()) {
    ViewRow row = iter.next();      
    System.out.println( row.getId()); // ID of the document
    System.out.println(row.getKey()); // Key of the view row
    System.out.println(row.getValue()); // Value of the view row
    System.out.println(row.getDocument()); // Full document if included
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 2022-12-19
    • 1970-01-01
    相关资源
    最近更新 更多