Thanks. I figured out what I was doing wrong.
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.johnson@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>