создать индекс на диване для ARRAY_REMOVE - PullRequest
2 голосов
/ 04 апреля 2019

Я хочу выполнить этот запрос:

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"
}

1 Ответ

4 голосов
/ 05 апреля 2019

У вас должно быть предложение 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";
...