Search code examples
kuzzle

How to append or remove an element from an existing array in kuzzle


Let's imagine this situation Alice and Bob are connected to the same kuzzle server. There is a document structured like this:

{
  "nom": "Festival de l'automne",
  "participants": [id1, id2, ...]
}

Alice and bob want to update the document nearly at the same time. If using kuzzle.document.update() i have to use a previously stored value on Alice's or Bob's client to update the participants array. That can lead to conflict or data loss.

My question is is there a way to update the "participants" array using the previous values server side ? or is there a way to directly use an elasticsearch query in order to user scripts like

{
  "script" : "ctx._source.participants += participants",
  "params" : {
    "participants" : "idx"
  }
}

Solution

  • Kuzzle does not expose Elasticsearch scripting features for security reasons (privilege escalation and heavy scripts that could DOS the server).

    You should expose a specific API action to atomically appends new values to an array. This API action should use the Integrated Elasticsearch Client to use a painless script.

    You can find more information about how to deal with array in the documentation