假设我在Object_pair(values).val.data上创建索引。
我的索引是否将“ values”字段存储为数组(由于object_pair的原因,ID的元素名称和val的元素名称)?
如果是这样,并且如果我的n1ql查询是一个覆盖的查询(通过select子句仅获取Object_pair(values).val.data),是否还会有性能开销? (因为我的印象是,在上述情况下,由于索引已经包含“ values”字段作为数组,因此不会进行实际的object_pair转换,因此避免了开销。仅在这种情况下的未覆盖查询将访问实际文档,并在“ 值”字段上完成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
您可以粘贴完整的创建索引语句吗?
在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