Как заменить элемент списка в arangodb - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть список в коллекции go, как показано ниже

{
"id":"123"
"studentlist": [
    "a",
    "b",
    "c"
  ]
}

Теперь, основываясь на некоторых условиях фильтра, я должен заменить определенный элемент списка набором замены. В этом примере я хочу заменить b на [b1, b2], чтобы моя коллекция выглядела ниже

 {
        "id":"123"
        "studentlist": [
            "a",
            "b1",
            "b2",
            "c"
          ]
        }

, как это сделать с помощью запроса aran go.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2020

В вашем распоряжении много функций для манипулирования данными, например, с помощью модифицирующих массив REMOVE_VALUE, APPEND и SORTED Я массирую studentlist исходных данных и использую объект- изменив MERGE, чтобы получить желаемый результат.

LET data = {
"id":"123",
"studentlist": [
    "a",
    "b",
    "c"
  ]
}
LET list = SORTED(APPEND(REMOVE_VALUE(data.studentlist, "b"), ["b1", "b2"]))
RETURN MERGE(data, {studentlist: list})

Возвращает желаемый

[
  {
    "id": "123",
    "studentlist": [
      "a",
      "b1",
      "b2",
      "c"
    ]
  }
]

как отдельный элемент списка результатов. Это должно начать вас. Вы можете использовать LET выражения в FOR запросах, вы можете использовать подзапросы для сбора данных и так далее ... А затем использовать ответ @ Ömer_Taban для обновления документов, например,

FOR d IN data
   FILTER <YOUR_CONDITIONS>
   LET list...
   ... 
   UPDATE d WITH list IN data
0 голосов
/ 12 февраля 2020

Вы можете заменить «studentlist» как весь список.

UPDATE "<document_key>" WITH {
  "studentlist": [
    "a",
    "b1",
    "b2",
    "c"
  ]
} IN <collection_name>
...