如何使用c#从数据桶中获取所有文档?

时间:2012-10-25 12:18:45

标签: c# nosql couchbase

如何从数据桶中获取所有文件?

我尝试了一个示例,但我只能获得一个特定的文档。这是我的代码:

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

3 个答案:

答案 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