我有一个要求,其中我从couchbase获取文档。
在Map函数中跟随我使用的相同 -
function (doc, meta) {
if (meta.type == "json" && doc!=null) {
emit(doc);
}
}
没有减少功能。以下是我获取文档的java代码 -
List<URI> hosts = Arrays.asList(
new URI("http://<some DNS with port>/pools")
);
// Name of the Bucket to connect to
String bucket = "Test-Sessions";
// Password of the bucket (empty) string if none
String password = "";
//System.setProperty("viewmode", "development");
// Connect to the Cluster
CouchbaseClient client = new CouchbaseClient(hosts, bucket, password);
String designDoc = "sessions";
String viewName = "by_test";
View view = client.getView(designDoc, viewName);
Query query = new Query();
query.setIncludeDocs(true);
query.setKey(String.valueOf(122));
ViewResponse result = client.query(view, query);
Object object = null;
for(ViewRow row : result) {
if(null != row) {
object = row.getDocument();
}// deal with the document/data
}
System.out.println("Object" + object);
我在couchbase中的数据是关键 - “122”和值 - “真实”。但由于某种原因,我没有在ViewResponse中获得任何行。什么出错可以有人帮忙吗?
答案 0 :(得分:2)
我不明白你在这里想要实现的目标,你正在使用一个视图来获取文档的关键?键== 122?为什么你不能只做client.get(122)?
如果你只需要一个桶中所有键的列表(你可以用它来通过包含文档撤回所有文件),那就按照这样的方式制作你的函数:
function (doc, meta) {
if (meta.type == "json") {
emit();
}
}
文档的键始终作为ID(viewRow.getId())发出。您不需要发出文档,尝试尽可能少地发出数据以保持视图大小不变。
如果您需要操作存储桶中的所有文档,请注意随着大小的增加,也许您需要查看分页以循环显示结果。 http://tugdualgrall.blogspot.com.es/
此外,一旦你有ViewResponse循环,就像这样:
for(ViewRow row : result) {
row.getDocument(); // deal with the document/data
}
您无需在行上检查null。