如何在Apache AGE中创建自动递增(串行)属性?
例如,在下面的查询中,我想添加一个新的属性order_id
,它是唯一的,并且每次添加新订单时都会自动递增。
SELECT *
FROM cypher('online_orders', $$
CREATE(:User{name:"user1" ,email : "test@test.com" , phone:"123456" });
$$) AS (result agtype)
如何在Apache AGE中创建自动递增(串行)属性?
例如,在下面的查询中,我想添加一个新的属性order_id
,它是唯一的,并且每次添加新订单时都会自动递增。
SELECT *
FROM cypher('online_orders', $$
CREATE(:User{name:"user1" ,email : "test@test.com" , phone:"123456" });
$$) AS (result agtype)
9条答案
按热度按时间txu3uszq1#
由于节点和边的属性作为JSON对象存储在
properties
列中,我相信这不能仅通过openCypher语法实现。此外,AGE存储每个节点和边的ID,因此创建order_id
属性可能是多余的。但你可以这样做:创建用户并将order_id
属性设置为与节点id
相同。ukqbszuj2#
到目前为止,没有办法实现这一点与一些约束或功能.实现这一点的一种方法是创建一个触发器,该触发器查询当前的最高order_id并递增1
为触发器创建函数
创建触发器
创建订单
每次创建订单时,请确保将
order_id
添加为0。5vf7fwbs3#
Apache AGE在其当前形式中不提供用于自动递增或串行属性的内置机制,就像传统关系数据库中一样。
但是,您可以通过实现自定义解决方案并编写自己的函数来实现自动增量。希望有帮助!
wqlqzqxt4#
Apache AGE
不提供对自动递增或串行属性的内置支持。我们可以根据需要定义节点和边的属性,但是对于自动增量,可以存在可以定义的定制逻辑。uelo1irk5#
AGE中不支持自动递增。你可以做的是为它定义一个自定义函数。
您可以在插入新记录之前获取最大的order_id,然后将其递增1,然后插入记录。
这样的东西可能会有帮助(未测试):
lo8azlld6#
正如有人已经提到的,auto_increment不可用,它将在下一个版本中实现。我们现在可以做的是定义一个自定义逻辑,通过它我们可以在节点中保留最新的order_id的值,并且每当我们输入新的订单数据时,我们都会不断更新它。这样,我们的每个订单数据都有一个唯一的订单ID。
你也可以在apache age中编写自定义函数:
您可以从以下文档中获得有关用户定义函数的说明:
User Defined Functions
你也可以在GitHub上提出这个问题,以便尽快开始工作。
Apache Age Issue
8tntrjer7#
我认为这是不支持的,但你可以尝试做的是创建一个单独的数据库表来创建自动递增的ID,你将需要实现一个混合查询,每当你创建一个新节点,在IDs表中创建一个新行,该行包含一个列,以便您可以轻松地引用回节点(这不是最好的选择)或者更好的选择是在表中创建一行,然后获取ID值并将其存储在新节点中,这就是你确保每次创建新节点时都有一个唯一的ID。
我希望这有助于您了解如何实现它。
roqulrg38#
为了实现这一点,您必须定义一些自定义逻辑,因为当前自动增量方法不可用。
k3fezbri9#
目前在Apache AGE中还不支持属性的自动递增,但是您可以实现一个用户定义的函数来实现这一点。