update/upsert 无法更新已经存在的边。

link
https://docs.nebula-graph.io/2.0/3.ngql-guide/12.vertex-statements/1.insert-vertex/

这是我在测试环境验证的。

我是1.1.0版本,不是2.0

那你为isAgent字段设置默认值之后可以更新吗

我的疑问点是
1、nebua-1.1.0版本我执行alter 添加语句之后,没有提示我需要默认值,文档中也没有要求一定要加默认值,并且我查询增加的字段是有默认值0,说明可能内核中有自动加默认值的逻辑,否则应该是空值NULL。

alter edge usertomobile ADD (isAgent int);

2、为什么新增字段没有显式设置默认值会影响更新逻辑,不能更新是不是有点不合理?

mark~~感谢你的反馈,如果有改动,我会及时更新文档

你应该是插入完数据再执行的 alter操作,所以upsert的时候,已有数据读不出isAgent这个字段,那你upsert的时候,设置下这个值吧。

第一点:alter的字段不需要强制加默认值的
第二点:假如要用这个新加的字段在update的时候作用于存在的数据,那么该字段需要有默认值,不然需要你在upsert的时候,指定值

那我能查到isAgent字段有 0 值,不算是自动添加了默认值吗?新增字段的默认值需要在我更新其他字段的时候设置,这也是不合理的啊,根本就是不相干的两个字段,逻辑也说不过去。况且,我还设置不了。
这就是个bug啊

我在测试环境验证,alter 添加字段时显示指定默认值,才可以更新成功。

alter edge follow add (isAgent int DEFAULT 0);

整理一下问题:
1、如果我alter 新增字段不设置默认值,那么更新其他字段会失败,并且更新新增字段也会失败,数据库出现无法更新的情况,就是个bug。
2、1.1.0版本的alter文档中,没有明确说明添加字段需要显示设置默认值。并且执行无默认值的alter语句也没有warning之类的提示,对后续更新也是一个误导,如果不设置默认值都不能更新字段了,那么应该强制alter添加字段的时候设置默认值,或者用户不指定默认值的时候,server端做默认处理设置NULL值,不要影响更新操作。建议这块文档也需要说明清楚,否则其他人也会遇到这种问题。
https://docs.nebula-graph.com.cn/manual-CN/2.query-language/4.statement-syntax/1.data-definition-statements/alter-edge-syntax/

2 个赞

问题1: 我觉得这样实现也是没问题的,一个新的字段,原来没有值,现在对其他字段进行修改的时候,新的字段需要填值,这个值无非就是从用户来,或者从默认值或者null来,1.0没有null,现在用户没有填值,也没有设置默认值,报错是没问题。 但是你前面提到,你填了值,但是还是报错了,这是bug,也可能是1.0为了简单处理,要求用户对schema增加字段时必须使用默认值,故意这样设计。2.0 不会有这样的问题。
问题2: 文档的update和upset需要对schema修改或者新加字段的情况下说明下的情况。
最后,感谢你的反馈。

2 个赞