Graph 如何更改Grakn中属性的值
在Grakn中,我想更改附加到Graph 如何更改Grakn中属性的值,graph,entity,vaticle-typeql,vaticle-typedb,Graph,Entity,Vaticle Typeql,Vaticle Typedb,在Grakn中,我想更改附加到实体的名称属性的值 目前我正在这样做(见下文),这只是删除属性,然后将一个新属性插入到country实体中 match $b isa country, has name "Old Name"; $a isa name; $a val contains "Old Name"; delete $a; insert $b has name "New Name"; 我找不到任何关于如何实际编辑属性值的文档 有什么想法吗?实际上现在,我不确定你能不能。。。如果您进行匹
实体的名称
属性的值
目前我正在这样做(见下文),这只是删除属性,然后将一个新属性插入到country实体中
match
$b isa country, has name "Old Name";
$a isa name;
$a val contains "Old Name";
delete $a;
insert
$b has name "New Name";
我找不到任何关于如何实际编辑属性值的文档
有什么想法吗?实际上现在,我不确定你能不能。。。如果您进行匹配
,我没有找到任何解决方案<代码>插入
您将添加一个新的资源,需要删除旧的资源。它不会被更新。不过,我相信它将推出一个新功能;)
不要忘记提交您的
删除事务。所有对图形的修改都需要提交。在Grakn中,重要的是要理解,具有相同类型和值的属性在所有者之间共享
这意味着删除属于特定概念的属性也将删除所有其他概念的属性
以下是几个例子:
例1
这里我们插入了两个同名的概念
match $x isa company, has name $n; $n "grakn"; delete $n;
现在,name
grakn
已被删除,这意味着它不再存在于数据库中,因此您会发现它也已被网站删除
例2
在本例中,我们插入了两个不同的公司,它们共享业务名称“grakn”,以及一个网站名称为“grakn”的网站
在这种情况下,网站名称
“grakn”不会被删除,但公司的共享名称将被删除
示例3-可能就是您想要的示例
insert $x isa company, has name "grakn";
insert $x isa website, has name "grakn";
与ex1一样,我们添加了一个共享属性的公司和网站(因为属性类型和值相同)
这一次我们只想删除公司和属性之间的关联,并且保持网站不变:
match $x isa company, has name "grakn" via $r; delete $r;
这将查找关系,$r
,即将属性链接到其所有者的幕后实际连接,并将其删除
与示例1相比,在本例中,您会发现网站保留了它的名称,因为属性本身没有被删除,只有一个到它的连接
解决方案
更新属性需要额外的步骤,因为我们需要添加一个新属性来替换我们删除的属性。在执行此操作时,我们需要确保引用的公司(实例)与我们从中删除名称(属性)的公司(实例)相同。否则,您如何重新找到您为了添加新名称而删除其名称的公司
我们可以通过匹配来实现这一点。。。插入
查询,然后插入
查询:
match $x isa company, has name "grakn";
insert $x has name "new-name";
match $x isa company, has name "grakn" via $r; delete $r;
嗨,这是目前的做法。下一个版本将使用新的via
语法简化该过程。关于更新不允许的资源的值。资源值是不可变的。我们将在未来简化更改与实体关联的资源的过程。
insert $x isa company, has name "grakn";
insert $x isa website, has name "grakn";
match $x isa company, has name "grakn" via $r; delete $r;
match $x isa company, has name "grakn";
insert $x has name "new-name";
match $x isa company, has name "grakn" via $r; delete $r;