arrays - Couchbase:在包含对象数组的数组上创建索引

标签 arrays couchbase n1ql

我正在尝试在以下结构上创建索引:


"creators": [
   {
        "ag_name": "Travel",
        "ag_ids": [
            {
                "id": "1234",
                "type": "TEST"
            }
        ]
    }
]

我创建的索引如下:

CREATE INDEX `Test_Index` ON `bucket`((ARRAY(ARRAY [t.ag_name, v] FOR v IN OBJECT_VALUES(t.`ag_ids`) END) FOR t IN `indexed_data`.`pos` END))
WHERE ((SUBSTR0((META().`id`), 0, 2) = "tt") AND (`indexed_data` IS VALUED))

问题

我几个小时前开始使用 couchbase。我想知道。我创建的索引是否正确?我的意思是它正在成功创建。但是我不确定它是否涵盖了所有字段,包括子结构数组中的字段


查询

SELECT META().id
FROM bucket
WHERE SUBSTR0((META().`id`), 0, 2) = "tt"
AND indexed_data.reservation_type = "HOLA"
AND chain_code="FOO1"
AND indexed_data.property_code="BAR1"
AND ANY creator IN indexed_data.creators SATISFIES creator.ag_name="FOO" END
AND ANY creator IN indexed_data.creators SATISFIES (ANY ag in creator.ag_ids SATISFIES ag.id="1234" END AND ANY ag in creator.ag_ids SATISFIES ag.type="TEST" END) END

最佳答案

以上查询的唯一方法是可以覆盖整个索引 indexed_data.creators ARRAY。示例 1 https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/indexing-arrays.html#covering-array-index .您还可以为 ARRAY 中的字段之一创建 ARRAY 索引。当您引用数组中的多个字段时,您将无法使用上述链接中描述的隐式覆盖数组索引

CREATE INDEX ix1 ON bucket (chain_code,indexed_data.reservation_type, indexed_data.property_code,  indexed_data.creators ) 
    WHERE SUBSTR0((META().`id`), 0, 2) = "tt";

您还对同一 ARRAY 的多个 ANY 子句执行 AND。即意味着它可以与数组中的任何位置匹配如果需要相同的位置都匹配你应该使用以下查询。

SELECT META().id
FROM bucket
WHERE SUBSTR0((META().`id`), 0, 2) = "tt"
   AND indexed_data.reservation_type = "HOLA"
   AND chain_code="FOO1"
   AND indexed_data.property_code="BAR1"
   AND (ANY c IN indexed_data.creators
        SATISFIES c.ag_name = "FOO"
           AND (ANY ag IN c.ag_ids
                SATISFIES ag.id = "1234" AND ag.type = "TEST"
                END)
        END);

关于arrays - Couchbase:在包含对象数组的数组上创建索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71843915/

相关文章:

c - 即使在初始化动态分配的结构数组的成员之后仍然存在垃圾值

c++ - 在 C++ 中将 bool 数组显示为黑白屏幕

hadoop - Sqoop 从 couchbase 导入到 hadoop

hadoop - Couchbase/hadoop 连接器 : sqoop job FAILED "Found interface org.apache.hadoop.mapreduce.TaskAttemptContext, but class was expected"

node.js - N1ql -> IN 运算符不适用于其他条件

swift - 我可以在运行时根据条件数组在 Couchbase Lite swift 中创建 Where 子句吗?

couchbase - 如何使用函数或运算符迭代 Couchbase 中的记录

c - 从c中的fread()形式读取缓冲区数据

java - 打印二维字符串

couchbase - 这个 couchbase 索引有什么问题?