c# - Couchbase 4.5 返回部分文档

标签 c# .net couchbase n1ql

我目前正在开展一个项目,我们今天在电子商务网站上使用 couchbase 4.1。

我想将我们网站的整个类别结构作为单个文档存储在 Couchbase 中,然后查询特定类别并在某些情况下返回该类别,而在其他情况下我想返回该类别及其子类别。

我很确定我必须使用数组索引器来提高这项工作的效率,但我对 Couchbase 很陌生,所以我不确定它应该如何构建(或者即使它是可能的)。

我的文档的一部分看起来像这样(结构中有 4 个级别和大约 8-10 个顶级类别):

{
  "Categories": [
    {
      "DisplayName": "Category One",
      "Id": 1,
      "Categories": [
        {
          "DisplayName": "Child category",
          "Id": 10,
          "Categories": [
            {
              "DisplayName": "Child child category",
              "Id": 100,
              "Categories": [
                {
                  "DisplayName": "Child child child category",
                  "Id": 1000
                },
                {
                  "DisplayName": "Sibling child category",
                  "Id": 1001
                }                
              ]
            },
            {
              "DisplayName": "Child",
              "Id": 101,
              "Categories": [
                {
                  "DisplayName": "Another child category",
                  "Id": 2001
                }
              ]
            }            
          ]
        }
      ]
    }
  ]
}

如果我查询 Id = 100,我希望我的结果如下所示:

{
  "DisplayName": "Child child category",
  "Id": 100,
  "Categories": [
    {
      "DisplayName": "Child child child category",
      "Id": 1000
    },
    {
      "DisplayName": "Sibling child category",
      "Id": 1001
    }                
  ]
}

在某些情况下,我对生 child 不感兴趣。我尝试使用数组 (N1QL) 创建查询以选择我的数组,但我不确定在具有复杂对象级别时是否有可能。

可以给我一些关于这如何可能的指导(即使它是?)。我们正在使用 Couchbase .NET 客户端。

问候马丁

最佳答案

这很有趣,因为您正试图将所有内容存储在一个文档中,然后查询该文档。这是一种方法。

查询没有子分类的分类ID 100:

SELECT c.Id, c.DisplayName
FROM default
UNNEST ( ARRAY cat FOR cat WITHIN Categories WHEN cat.Id IS NOT NULL END ) AS c
WHERE c.Id = 100;

要查询带有子类别的类别 ID 100:

SELECT c.Id, c.DisplayName, c.Categories
FROM default
UNNEST ( ARRAY cat FOR cat WITHIN Categories WHEN cat.Id IS NOT NULL END ) AS c
WHERE c.Id = 100;

要查询只有一级子类别的类别 ID 100:

SELECT c.Id, c.DisplayName, sub.Id AS SubId, sub.DisplayName AS SubDisplayName
FROM default
UNNEST ( ARRAY cat FOR cat WITHIN Categories WHEN cat.Id IS NOT NULL END ) AS c
LEFT OUTER UNNEST c.Categories AS sub
WHERE c.Id = 100;

关于c# - Couchbase 4.5 返回部分文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36350270/

相关文章:

node.js - PouchDB 基本身份验证不适用于同步网关

c# - 无法在我的 Access 数据库中插入图像

c# - 更新面板中的 ASP.NET 计时器结果提供了完整的回发

c# - 在 C# 中修改数组 "in-place"?

config - .NET 中的多个 Couchbase 存储桶配置

couchdb - 在 couchbase 2.0.2 中,如何获取文档的所有版本

c# - 如何根据绑定(bind)对象的类型动态更改DataTemplate?

c# - ASP.NET 从页面上的外部 dll 注册一个控件

.net - 如何从客户端桌面应用程序记录和检索错误消息?

c# - C#中的数据绑定(bind)问题