【问题标题】:Couchbase Index and N1QL QueryCouchbase 索引和 N1QL 查询
【发布时间】:2018-05-26 23:43:07
【问题描述】:

我在我的 couchbase 服务器上创建了一个新的存储桶 FooBar。

我有一个 Json 文档,它是一个包含一些属性的列表,它位于我的沙发库存储桶中,如下所示:

[
{
"Venue": "Venue1",
"Country": "AU",
"Locale": "QLD"
},
{
"Venue": "Venue2",
"Country": "AU",
"Locale": "NSW"
  },

  {
    "Venue": "Venue3",
    "Country": "AU",
    "Locale": "NSW"
}
]

当使用 N1QL 查询时,我如何让 couchbase 查询返回位置列表。

例如,SELECT * FROM FooBar WHERE Locale = 'QLD'

请让我知道我还需要创建的任何索引。此外,我怎样才能只返回对象类型为 Location 的结果,而不是说另一个可能具有“Locale”属性的对象。

查德

PS - 我还创建了一些索引,但是我想就如何实现这一点得到公正的回答。

【问题讨论】:

  • 您显示的 JSON 是一个对象数组。通常这些都是单独的文档。我只是想验证您是否真的想像您在回答之前显示的那样查询一个数组。
  • 嗨,Hod,在这个阶段它是一个数组。但很高兴根据您对数据模型的建议进行转换。如果您能提供这两种方法,将不胜感激。

标签: couchbase n1ql couchbase-view


【解决方案1】:

通常,您会将它们存储为单独的文档,而不是作为对象数组存储在单个文档中,这就是当前显示数据的方式。

由于您可以混合文档结构,区分它们的常用模式是使用类似于“类型”字段的内容。 ('type' 没有什么特别之处,只是最常见的选择。)

所以你的例子看起来像:

{
  "Venue": "Venue1",
  "Country": "AU",
  "Locale": "QLD",
  "type": "location"
}
...
{
  "Venue": "Venue3",
  "Country": "AU",
  "Locale": "NSW",
  "type": "location"
}

其中每个 JSON 对象都是具有唯一文档 ID 的单独文档。 (如果您有一些预定义的数据要加载,请查看 cbimport 了解如何将其添加到您的数据库中。有几种不同的格式可以执行此操作。您也可以让它为您生成文档 ID。)

那么,@vsr 写的是正确的。您将在 Locale 字段上创建索引。这将是您想要的查询的最佳选择。请注意,您也可以使用 CREATE INDEX ix1 ON FooBar(Locale); 在每个文档上创建索引。在这个简单的情况下,它并没有真正的区别。阅读管理控制台的查询解释功能,以获取帮助以了解优化查询。

最后,@vsr 写的查询也是正确的:

SELECT * FROM FooBar WHERE type = "Location" AND Locale = "QLD";

【讨论】:

    【解决方案2】:

    在 FooBar(Locale) 上创建索引 ix1;

    https://dzone.com/articles/designing-index-for-query-in-couchbase-n1ql

    CREATE INDEX ix1 ON  FooBar(Locale) WHERE type = "Location";
    SELECT * FROM FooBar WHERE type = "Location" AND Locale = "QLD";
    

    如果是数组,文件名是列表

    CREATE INDEX ix1 ON  FooBar(DISTINCT ARRAY v.Locale FOR v IN list END) WHERE type = "Location";
    SELECT * FROM FooBar WHERE type = "Location" AND ANY v IN list SATISFIES v.Locale = "QLD" END;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      相关资源
      最近更新 更多