Как добавить значение ключа в couchbase, где значение получено из уже существующего значения ключа в документе - PullRequest
1 голос
/ 21 апреля 2020

У меня есть json документ в couchbase, структура которого выглядит следующим образом

"root": {
          "type": "TEST",
          "parameters": {
            "numbers": [
              "1",
              "2-001",
              "3",
              "2-001",
              "5-002"
           ] 
          }
        }

Мне нужно добавить новую пару ключ-значение и сделать документ похожим на это

"root": {
          "type": "TEST",
          "parameters": {
            "numbers": [
              "1",
              "2-001",
              "3",
              "2-001",
              "5-002"
           ],
          "unique": [
              "1",
              "2",  
              "3",
              "5"
          ] 
         }
        }

Я должен снять все, что следует после -, и выбрать уникальные элементы, присутствующие внутри него.

1 Ответ

3 голосов
/ 21 апреля 2020

Если вы хотите сделать это с N1QL, вы можете использовать преобразование ARRAY в сочетании с ARRAY_DISTINCT. Преобразование будет зависеть от вас. Вы можете использовать одну из REGEXP_ функций или что-то простое, например SPLIT. Например:

select ARRAY_DISTINCT(ARRAY SPLIT(v,"-")[0] FOR v IN d.root.parameters.numbers END) as `unique`, d.root.parameters.numbers
from mybucket d;

Это вернет документ (ы) в форме:

[
  {
    "numbers": [
      "1",
      "2-001",
      "3",
      "2-001",
      "5-002"
    ],
    "unique": [
      "1",
      "2",
      "3",
      "5"
    ]
  }
]

Если вы действительно хотите внести изменения в документ (ы), вы можете сделать это SELECT в UPDATE:

UPDATE mybucket
SET root.`unique` = ARRAY_DISTINCT(ARRAY SPLIT(v,"-")[0] FOR v IN root.parameters.numbers END)
where root.`unique` is missing;
...