在couchbase上为ARRAY_REMOVE创建索引

问题描述 投票:2回答:1

我想执行此查询:

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

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

主要指数沙发基地。

查询的目标是从数组'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"
}
couchbase n1ql
1个回答
4
投票

您必须具有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";
© www.soinside.com 2019 - 2024. All rights reserved.