【问题标题】:Couchbase N1QL: index and query on array fieldsCouchbase N1QL:数组字段的索引和查询
【发布时间】:2015-07-09 01:06:43
【问题描述】:

平台:Couchbase Server 4.0 beta,Java 客户端 2.1.3

我正在寻找类似于 SQL JOIN 的东西。例如,我有表单的文档,其中 field2 嵌入在文档中,而不是像在关系数据库中那样嵌入在单独的表中:

    {field1:" ..", field2:[{key:1, ...},{key:3, ...},..],...}.

我怎样才能实现这样的目标:

    select * from bucket where field2.key=3;

我怎样才能索引键,一个假设的例子:

    create index idx_key on bucket(field2.key);

【问题讨论】:

    标签: couchbase n1ql


    【解决方案1】:

    如果你做了这样的事情会怎样:

    SELECT 
        *
    FROM `your-bucket-here` AS fields
    WHERE 
        ANY field IN fields.field2 SATISFIES field.key = 3 END
    

    这样只要一个嵌套数组项包含你的值,就会被返回。

    在创建索引方面,您是要创建二级索引还是主索引?你总是可以这样做:

    CREATE PRIMARY INDEX index_name ON `your-bucket-name-here` USING GSI;
    CREATE INDEX index_name ON `your-bucket-name-here` USING GSI;
    

    让我知道这是怎么回事!

    最好的,

    【讨论】:

    • 您的查询有效,谢谢@Nic。我想出了一个使用 UNNEST 的不同查询,它也可以工作。问题的第二部分仍然存在,如何在 field2.key 上创建二级索引。
    • CREATE INDEX(二级索引)语法应提供括号中的字段,如CREATE INDEX index_name ON bucket(field2) USING GSI;。所以我想知道您是否可以将field2 替换为field2.key,但我不确定...
    • 要检查是否使用了索引,您可以使用EXPLAIN SELECT...(在语句前加上 EXPLAIN 以获取执行计划并在其中查找索引名称)
    • 感谢@Simon 的建议。已经试过了。不工作。顺便说一下,这就是多键索引在 MongoDB 中的样子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    相关资源
    最近更新 更多