The update keyword is a so-called “non-updating expression”; the
result will not have any effect on the database. You can use the
simple map operator…

db:open('db','country')/json[countryId = 1] ! (
   replace value of node countryName with 'Aldorria',
   insert node <population type="number">1000</population> into .
)

…or FLWOR expressions, etc. to change nodes in the database.

See e.g. [1] to learn more about XQuery Update.
___________________________

[1] http://docs.basex.org/wiki/XQuery_Update


On Sun, Nov 12, 2017 at 6:12 AM, E. Wray Johnson <wray.john...@gmail.com> wrote:
> I have tried many ways of updating JSON objects and none seem to work.
> Using the BaseX GUI, the Result window seems to show the correct outcom, but
> the database is not modified.  What am I missing? Do I need to explicitly
> start/stop a transaction?
>
> XQUERY:
> db:open('db','country')/json[countryId = 1]
> update {
>    replace value of node countryName with 'Aldorria',
>    insert node <population type="number">1000</population> into .
> }
>
>
> Result:
> <json type="object">
>   <countryId type="number">1</countryId >
>   <countryName>Aldorria</countryName>
>   <population type="number">1234</population>
>   <planetName>Zeldon</planetName>
> </json>

Reply via email to