Harinath Mallepally
Harinath Mallepally

Reputation: 51

Orientdb 3.0 How to use map field for dynamic attributes without loosing existing data

How I am trying to use map to store multiple key value properties. the problem I see is that it doesn't let me store existing data, it overrides data everytime I tried to set a new property.

 Create VERTEX Person extends V;
CREATE CLASS Person EXTENDS V;
CREATE PROPERTY Person.name STRING (MANDATORY TRUE, MIN 3, MAX 50);
Create VERTEX Person set name="test";
 update ( SELECT from Person where name="test") SET mapField=
 {"property1":mapField.property1+10};

set property1 into map, and update it, works just fine.

update ( SELECT from Person where name="test") SET mapField=
{"property1":mapField.property1+30};
select from Person;

Set another property "property2", now I loose the property1.

update ( SELECT from Person where name="test") SET mapField=
{"property2":mapField.property2+10};
 select from Person;

is ther a way I can retain previous property and make this work still?

Thanks Hari

Upvotes: 0

Views: 60

Answers (1)

Luigi Dell'Aquila
Luigi Dell'Aquila

Reputation: 2814

This should do the trick:

update ( SELECT from Person where name="test") 
SET mapField.property1 = mapField.property1 + 30;

In V 2.2 there was also an UPDATE PUT option, ie.

update ( SELECT from Person where name="test") 
PUT mapField = property1, eval('mapField.property1 + 30');

but it's not supported anymore (and it's definitely ugly)

Upvotes: 1

Related Questions