Как я могу сохранить и обновить вложенный объект json в couchbase, используя java sdk - PullRequest
2 голосов
/ 13 июня 2019

Я использую couchbase Community Edition 5.0.1 и java-клиент 2.7.4. Я хочу сохранить следующий вложенный объект json в базе данных couchbase. Если я хочу обновить тот же объект, не затрагивая другие поля.

Например:

  1. Если я хочу добавить еще один объект игрока под объектом игроков массив
  2. Если я хочу добавить еще одну группу, скажем 'Z Group' в массиве объектов группы

Как я могу достичь этого, не затрагивая другие поля.

 {
    "doctype": "config:sample",
    "group": [{
            "name": "X Group",
            "id": 1,
            "players": [{
                    "name": "Roger Federer",
                    "number": 3286,
                    "keyword": "tennies"
                },
                {
                    "name": "P. V. Sindhu",
                    "number": 4723,
                    "keyword": "badminton"
                }
            ]
        },
        {
            "name": "Y Group",
            "id": "2",
            "players": [{
                    "name": "Jimmy Connors",
                    "number": 5623,
                    "keyword": "tennies"
                },
                {
                    "name": "Sachin",
                    "number": 8756,
                    "keyword": "Cricket"
                }
            ]
        }
    ]
}

Ответы [ 3 ]

0 голосов
/ 14 июня 2019

Проверьте синтаксис update / update-for (последний пример) https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/update.html

UPDATE default AS d
SET d.group = ARRAY_APPEND(d.group, {......})
WHERE .....;

UPDATE default AS d
SET g.players = ARRAY_APPEND(g.players, {......}) FOR g IN d.group WHEN g.id = 2 END
WHERE .....;
0 голосов
/ 17 июня 2019

Если вы знаете, какие идентификаторы документов вы хотите обновить, вы можете использовать API поддокумента «ключ-значение», который, как правило, будет быстрее, чем использовать N1QL для обновления одного документа.

Это добавит нового игрока в конец массива «Players» X Group:

bucket.mutateIn(docId)
        .arrayAppend("group[0].players",
                JsonObject.create()
                        .put("name", "John Smith"))
                        // ... other player JSON
        .execute();

И это добавит новую группу Z в массив "group":

bucket.mutateIn(docId)
        .arrayAppend("group",
                JsonObject.create()
                        .put("name", "Z Group"))
                        // ... other group JSON
        .execute();
0 голосов
/ 14 июня 2019

N1QL имеет множество функций для работы с массивами:

https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/arrayfun.html

В вашем случае вы можете просто использовать ARRAY_INSERT или ARRAY_PREPEND

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...