Update operations on JSON objects are not working
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>
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>
Thanks. I figured out what I was doing wrong. On Mon, Nov 13, 2017 at 5:36 PM Christian Grün <christian.gruen@gmail.com> wrote:
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>
participants (2)
-
Christian Grün -
E. Wray Johnson