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

use*_*012 5 c# couchbase

我是沙发基地的新手.

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

using (var bucket = Cluster.OpenBucket())
{
    var document = new Document<dynamic>
    {
        Id = "Hello",
        Content = new
        {
            name = "Couchbase"
        }
    };

    var upsert = bucket.Upsert(document);
    if (upsert.Success)
    {
        var get = bucket.GetDocument<dynamic>(document.Id);
        document = get.Document;
        var msg = string.Format("{0} {1}!", document.Id, document.Content.name);
        Console.WriteLine(msg);
    }

    Console.Read();
}
Run Code Online (Sandbox Code Playgroud)

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

oct*_*ccl 16

到目前为止,在Couchbase中有两种不同的方式来查询文档内容:使用视图或使用N1QL查询语言(名为镍和现在的开发人员预览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; }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

var query = bucket.CreateQuery("dev_user", "userswith25");
var result = bucket.Query<dynamic>(query);
Run Code Online (Sandbox Code Playgroud)

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

N1QL

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

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

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

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

var query = "SELECT fname, email FROM test WHERE type = 'user' and age = 25";
var result = bucket.Query<dynamic>(query);
Run Code Online (Sandbox Code Playgroud)

在开发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<User>()
                            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
                        );
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

此外,还有其他变种:

希望这可以帮助,