如何从数据桶中获取所有文件?
我尝试了一个示例,但我只能获得一个特定的文档。这是我的代码:
CouchbaseClient oclient;
oclient= new CouchbaseClient("vwspace", "");// data bucket name
var results = oclient.Get("205");// document id
如何获取所有文件?
var results = oclient.? //what should i use here to get all documents
答案 0 :(得分:5)
使用Couchbase Server 2.0,您将使用视图获取所有文档。您的观点如下:
function (doc, meta) {
emit(null, null);
}
此视图将允许您访问所有ID(ID始终包含在非简化视图查询结果中)。
有关.NET中的视图和查询视图的更多信息,请参阅http://blog.couchbase.com/strongly-typed-views-net-client-library。
答案 1 :(得分:0)
您无法获取所有文件。创建一个“常量”原子整数值,它将是counter
,如下所示:
CouchbaseClient oclient;
oclient= new CouchbaseClient("vwspace", "");// data bucket name
ulong results = (ulong)oSourceBucket.Get("MYCOUNTER");// counter (integer incremental value)
当您将文档添加到存储区时,请不要使用某些documentId添加它们(我想您可以使用SQL数据库或其他形式),但是使用counter
来创建它们:
results = oSourceBucket.Increment("MYCOUNTER", results, 1);// counter (integer incremental value)
oSourceBucket.Store(StoreMode.Add, "MYITEM." + results.toString(), myNewObjectToStore);
现在,您可以for
循环使用oSourceBucket.Get(...)
所有项目,直至MYCOUNTER
值。我不确定Couchbase 2.0的新版本是否会有模式获取,但目前的稳定版本(我认为1.8.1)只允许精确的密钥获取。
记住这是KEY-VALUE存储,而不是SQL:)
Couchbase中还有MultiGet
,但在.NET客户端的最后一个稳定版本中它不存在,但它在引擎盖下使用,就像for...
循环使用多个Get
- s
答案 2 :(得分:0)
您需要创建一个发布文档ID(meta.id)的couchbase视图。
或者使用发出每条记录的现有视图。
然后
http://HOST:8092/YOURBUCKETNAME/_design/YOURDESIGNDOCNAME/_view/YOURVIEWNAME?reduce=false&limit=10
您将获得如下结果
{"total_rows":1321085,"rows":[
{"id":"key1","key": ... ,"value": ... },
{"id":"key2","key": ... ,"value": ... },
{"id":"key3","key": ... ,"value": ... },
...
]
}
“id”字段包含文档密钥。
您需要对结果进行分页。 http://www.couchbase.com/docs/couchbase-manual-2.0/couchbase-views-writing-querying-pagination.html