Couchbase: Как удалить элемент из списка на основе дочернего значения? - PullRequest
0 голосов
/ 12 февраля 2019

Couchbase 2.5 +

Новое для couchbase здесь.Я ищу, чтобы удалить элемент из списка, где один из дочерних элементов этого на основе значения дочерних элементов.Например, если я хотел удалить все записи в списке scores, где дочерний элемент score < 0.2

Этот элемент имеет ключ "dim::100020891::2020-10-04"

Я думал о запуске этого, но этоне работает

UPDATE Q1036628 USE KEYS "dim::100020891::2020-10-04" SET scores=ARRAY_REMOVE(scores, {
      "score"< "0.2"
    })

Элемент дивана:

   [
          {
            "Q1036628": {
              "record_update_dt": "2020-10-04",
              "scores": [
                {
                  "name": "A",
                  "score": 0.01
                },
                {
                  "name": "B",
                  "score": 0.5
                },
                {
                  "name": "C",
                  "score": 0.26
                },
                {
                  "name": "D",
                  "score": 0.17
                }
              ],
              "id": "100020891"
            }
          }
        ]

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Просто добавьте еще одно дополнение к решению Йохана Ларсона.

Предложение WHERE определяет, какие документы нужно изменить.Предложение SET определяет, что обновлять.У вас есть условие в предложении SET.Если в массиве показателей нет объектов NO, оценка <0,2 все еще изменяется (т.е. он обновляет то же значение).Чтобы избежать этого, вам нужно иметь предложение WHERE. </p>

UPDATE Q1036628 AS d USE KEYS "dim::100020891::2020-10-04" 
SET d.scores = ARRAY s FOR s IN d.scores WHEN s.score >= 0.2 END
WHERE ANY s IN d.scores SATISFIES s.score < 0.2 END;
0 голосов
/ 14 февраля 2019

Вы должны использовать предложение ARRAY.

UPDATE Q1036628 USE KEYS "dim::100020891::2020-10-04" 
SET scores = ARRAY s FOR s IN scores WHEN s.score >= 0.2 END

https://docs.couchbase.com/server/6.0/n1ql/n1ql-language-reference/collectionops.html#array

Возможно, вам придется немного поиграться с синтаксисом;У меня нет под рукой экземпляра.

...