如何在C#中检索couchbase数据库中的键/文档列表

我是沙发基地的新手。

这是我用于插入和获取文档的示例代码:

using (var bucket = Cluster.OpenBucket()) { var document = new Document { Id = "Hello", Content = new { name = "Couchbase" } }; var upsert = bucket.Upsert(document); if (upsert.Success) { var get = bucket.GetDocument(document.Id); document = get.Document; var msg = string.Format("{0} {1}!", document.Id, document.Content.name); Console.WriteLine(msg); } Console.Read(); } 

但我不知道如何检索存储文件列表。

到目前为止,在Couchbase中有两种不同的方式来查询文档内容:使用视图或使用N1QL查询语言(现在名为nickel和开发人员预览3状态)。

查看

Couchbase Views基于存储在数据库中的JSON文档的内容创建索引,并使用MapReduce编程模型编写。 Couchbase使用MapReduce处理整个群集中的文档,并根据其内容创建索引。 View是一个javascript函数,它在数据集中的每个项目上执行,进行一些初始处理和过滤,然后将转换后的结果作为键值集输出。

下图显示了结构视图:

查看结构

例如,假设您有一个名为test的存储桶,并且您希望存储文档具有以下结构:

 public class User { [JsonProperty("user_id")] public string UserId { get; set; } [JsonProperty("fname")] public string FirstName { get; set; } [JsonProperty("age")] public string Age { get; set; } [JsonProperty("email")] public string Email { get; set; } [JsonProperty("type")] public string Type { get; set; } } 

现在,假设您要查找25岁的所有用户,并且您想知道他们的姓名和电子邮件。 您的视图可能是这样的:

 function(doc, meta) { if (doc.type == "user" && doc.age==25) { emit(doc.user_id, [doc.fname, doc.email]); } } 

如果将此视图另存为设计文档名称 = dev_user和View Name = userswith25的开发视图,则可以通过以下方式在代码中使用此视图:

 var query = bucket.CreateQuery("dev_user", "userswith25"); var result = bucket.Query(query); 

如果您想了解有关视图的更多信息,请查看此video: Couchbase 3.0的视图和索引

N1QL

N1QL(发音为“nickel”)是Couchbase的下一代查询语言。 N1QL旨在满足分布式面向文档的数据库的查询需求.N1QL中的简单查询有三个部分:

  • SELECT – 要返回的文档部分
  • FROM – 要使用的数据存储区或数据存储区
  • WHERE – 文档必须满足的条件

查询中只需要SELECT子句。 通配符*选择文档的所有部分。 查询可以返回不同文档结构或片段的集合。 但是,它们都将匹配WHERE子句中的条件。

正如我之前所说,N1QL处于开发人员预览状态,因此尚未与Couchbase集成。 要使用它,您需要下载它并将其与Couchbase服务器集成。 按照上一个视图示例,我向您显示一个查询,以搜索具有相同条件的用户:

 var query = "SELECT fname, email FROM test WHERE type = 'user' and age=25"; var result = bucket.Query(query); 

在开发N1QL的同时,Coushbase正在开发一个语言集成查询(LINQ)提供程序,用于使用Couchbase .NET SDK使用N1QL查询Couchbase服务器。 这将为N1QL带来熟悉的LINQ语法,结果将映射到POCO。 下面我将展示一个如何在将来使用它的示例:

 using (var cluster = new Cluster()) { using (var bucket = cluster.OpenBucket("test")) { var users = from c in bucket.Queryable() where c.Age==25 select c; foreach (var user in users) { Console.WriteLine("\tName={0}, Age={1}, Email={2}", user.FirstName, user.Age, user.Email ); } } } 

此外,还有其他变种:

  • Telerik已经为Couchbase创建了一个Linq Provider ,我还没有使用过,但我认为它基于Couchbase .NET SDK 1.3,而不是2.0,这是你正在使用的版本。
  • 您可以将Couchbase与Elasticsearch集成,以使用开源搜索引擎Elasticsearch在您的应用程序中提供全文搜索。 使用此组合,您可以将文档保存在Couchbase中,稍后使用Elasticsearch进行搜索。 为此,您可以使用此elasticsearch .net客户端

希望这可以帮助,

我同意西蒙的观点。 查找键或N1QL的视图。 如果你还没有设置或与N1QL交互,它是一种非常强大的语言,可以在这里找到一个教程:

http://docs.couchbase.com/developer/n1ql-dp3/n1ql-intro.html

要查找符合条件的密钥,可以看到其他响应中显示的视图(以及即将发布的N1QL)。

另一个用例是,有一个键列表,可以在不使用循环的情况下检索相应的文档:

在存储桶上,您可以使用IDictionary> Get(IList keys)方法。 它获取您想要获取的键列表,并在字典中为每个键返回一个IOperationResult ,您可以像在示例中使用“get”变量一样使用它们。

在线下,这使用TPL,因此您不需要处理并行性,但您可以在覆盖中提供并行设置。

以下是使用2.0 .Net SDK进行批量操作的一些文档。 即使这是BETA的文档,也应该是相关的。

注意:视图的使用通常会为您提供索引的ID /内容,以及相关文档,因此在使用视图时,您甚至不需要进行批量获取。

请注意,N1QL是一种查询语言,需要与视图一起使用才能扫描和检索来自couchbase服务器的所有密钥。 N1QL允许您在数据集上创建主索引(使用视图),然后使用该索引运行查询。

安装并设置N1QL后,以下示例查询将在couchbase服务器上创建视图索引/主索引

在桶上创建主索引;

创建索引后,您可以从服务器检索所有密钥。

*从桶中选择*;

在内部,查询引擎将使用视图/主索引来获取服务器的密钥列表(完整桶扫描),然后使用该列表来检索值。

N1QL Developer预览必须使用视图。 您的create index语法是准确的,但Couchbase 4.0还引入了二级索引以及动态扩展查询和索引function的能力。 当发生这种情况时,称为“多维缩放”,N1QL应默认为新索引作为主索引方案,并且比视图快得多。

这里可以阅读更多关于多维缩放的内容:

http://www.couchbase.com/coming-in-couchbase-server-4-0