我有两个系列:用户和推文。我想知道允许我插入新推文并同时更新来自用户的推文总数的AQL查询。在用户集合中有一个文档,类似于:{ _key:“用户1”,推文总数:0个字符}在tweets集合中,有多个“tweet”文档,如:{关键字:“tweet 1,”发件人:“用户/用户1”}我如何插入一条新的tweet,同时更新用户中的total_tweets?
wmtdaxz31#
如果我没理解错的话,您期待的是一个使用SQL数据库的触发器功能的解决方案。然而,ArangoDB不提供触发器功能,因此,在插入新的tweet后,要更新用户集合中total_tweets的数量,有两种解决方案。1.将“插入tweet查询”和“更新tweet计数查询”合并成一个大查询,每次插入tweet时,都执行这个大查询。1.将这两个操作分离为两个查询,在代码中逐个执行,并使用一个事务确保在执行多个查询时数据库的ACID属性。
ar7v8xwq2#
一旦对一个集合执行了INSERT操作,就可以使用NEW文档来获取插入的结果(获取_id或_key)。然后可以在***不同的***集合上运行另一个INSERT/UPDATE/UPSERT/REPLACE。不能对同一个集合修改两次。documentation讨论了如何使用OLD和NEW,但似乎没有提到更新多个集合只适用于INSERT,而不适用于UPSERT或REPLACE(抛出"OLD set multiple times"错误)。但是,如果我没有理解错你的问题,你想在插入tweet后更新一个整数(total_tweets),这是transactions的领域,它是用代码处理的,而不是通过AQL。
INSERT
NEW
_id
_key
INSERT/UPDATE/UPSERT/REPLACE
OLD
UPSERT
REPLACE
"OLD set multiple times"
total_tweets
2条答案
按热度按时间wmtdaxz31#
如果我没理解错的话,您期待的是一个使用SQL数据库的触发器功能的解决方案。
然而,ArangoDB不提供触发器功能,因此,在插入新的tweet后,要更新用户集合中total_tweets的数量,有两种解决方案。
1.将“插入tweet查询”和“更新tweet计数查询”合并成一个大查询,每次插入tweet时,都执行这个大查询。
1.将这两个操作分离为两个查询,在代码中逐个执行,并使用一个事务确保在执行多个查询时数据库的ACID属性。
ar7v8xwq2#
一旦对一个集合执行了
INSERT
操作,就可以使用NEW
文档来获取插入的结果(获取_id
或_key
)。然后可以在***不同的***集合上运行另一个INSERT/UPDATE/UPSERT/REPLACE
。不能对同一个集合修改两次。documentation讨论了如何使用
OLD
和NEW
,但似乎没有提到更新多个集合只适用于INSERT
,而不适用于UPSERT
或REPLACE
(抛出"OLD set multiple times"
错误)。但是,如果我没有理解错你的问题,你想在插入tweet后更新一个整数(
total_tweets
),这是transactions的领域,它是用代码处理的,而不是通过AQL。