1

假设我在Object_pair(values).val.data上创建了一个索引。

我的索引是否会将“值”字段存储为数组(由于 object_pair,ID 为元素名称,数据为 val)?

如果是这样,并且如果我的n1ql查询是覆盖查询(通过 select 子句仅获取 Object_pair(values).val.data ),还会有性能开销吗?(因为我的印象是,在上述情况下,由于索引已经包含“<em>values”字段作为数组,因此不会发生实际的object_pair转换,因此避免了开销。仅在未覆盖的情况下查询将访问实际文档并在“<em>values”字段上完成 object_pair 转换)。

Couchbase 文档:

    "values": {
        "item_1": {
            "data": [{
                    "name": "data_1",
                    "value": "A"
                },
                {
                    "name": "data_2",
                    "value": "XYZ"
                }
            ]
        },
        "item_2": {
            "data": [{
                    "name": "data_1",
                    "value": "123"
                },
                {
                    "name": "data_2",
                    "value": "A23"
                }
            ]
        }
    }
}```

UPDATE:
suppose if we plan to create index on Object_pair(values)[*].val.data & Object_pair(values)[*].name

Index: CREATE INDEX idx01 ON ent_comms_tracking(ARRAY { value.name, value.val.data} FOR value IN object_pairs(values) END)

Query: SELECT ARRAY { value.name, value.val.data} FOR value IN object_pairs(values) END as values_array FROM bucket
4

1 回答 1

2

您能否粘贴您的完整创建索引语句?

在 OBJECT_PAIRS( values).val.data 上创建索引没有任何索引。

您可以通过创建主索引然后运行以下查询来检查它:

SELECT OBJECT_PAIRS(`values`).val FROM mybucket

输出是:

[
  {}
]

OBJECT_PAIRS( values) 返回包含对象值的属性名称和值对的值数组 -

SELECT OBJECT_PAIRS(`values`) FROM mybucket


[
  {
    "$1": [
      {
        "name": "item_1",
        "val": {
          "data": [
            {
              "name": "data_1",
              "value": "A"
            },
            {
              "name": "data_2",
              "value": "XYZ"
            }
          ]
        }
      },
      {
        "name": "item_2",
        "val": {
          "data": [
            {
              "name": "data_1",
              "value": "123"
            },
            {
              "name": "data_2",
              "value": "A23"
            }
          ]
        }
      }
    ]
  }
]

它是一个数组,所以它的 val 没有被直接引用

于 2020-02-21T06:19:15.457 回答