在沙发上为 ARRAY_REMOVE 创建索引

Posted

技术标签:

【中文标题】在沙发上为 ARRAY_REMOVE 创建索引【英文标题】:create index on couchbase for ARRAY_REMOVE 【发布时间】:2019-04-04 18:00:17 【问题描述】:

我想执行这个查询:

UPDATE `bucket` SET etats= ARRAY_REMOVE( etats, etats[2])

我的问题是如何创建一个索引来执行这个查询,我不想使用

主索引 couchbase。

查询的目标是从数组“etats”中删除一个元素。

文档示例:


  "lastUpdateTime": "2019-03-31T22:02:00.164",
  "origin": "origin1",
  "etats": [
    
      "dateTime": "2019-03-28T17:13:49.766",
      "etat": "etat1",
      "code": "code1"
    ,
    
      "dateTime": "2019-03-29T15:26:48.577",
      "etat": "etat2",
      "code": "code2"
    ,
    
      "dateTime": "2019-03-31T22:01:59.843",
      "etat": "etat3",
      "code": "code3"
    
  ],
  "etatType": "type1"

【问题讨论】:

您能否提供一两个文档示例? 另外,看起来这个查询旨在影响存储桶中的每个文档,所以我不确定索引是否会有很大帮助。 @MatthewGroves 请找一个文档示例,我编辑帖子 【参考方案1】:

必须有 WHERE 子句才能选择索引,否则只能选择主索引。 通常,您检查元素(如果存在)然后只更新该字段。 以下查询从数组中删除代码值为“code2”的对象

CREATE INDEX ix1 ON default (DISTINCT ARRAY v.code FOR v IN etats END) WHERE etatType = "type1";

UPDATE default AS d  
SET d.etats = ARRAY v FOR v IN d.etats WHEN v.code != "code2" END
WHERE d.etatType = "type1" AND ANY v IN d.etats SATISFIES v.code = "code2" END;

如果您真的只想为您的查询建立索引。

CREATE INDEX ix1 ON  `bucket` (etatType);

UPDATE `bucket` SET etats= ARRAY_REMOVE( etats, etats[2])
WHERE etatType = "type1";

【讨论】:

以上是关于在沙发上为 ARRAY_REMOVE 创建索引的主要内容,如果未能解决你的问题,请参考以下文章

在已经存在主键或唯一键约束的列上创建索引

Couchdb 和沙发帮助

模块化沙发,拒绝传统与平庸

PySpark array_remove 元素正则表达式问题

在 Windows 上为 localhost 创建自签名证书

在 Kotlin 上为 Google Maps Api 创建动态标记和变量访问