erlang - mnesia delete_object 异常?

标签 erlang mnesia

我看不出这里有什么问题,但我可能只是误解了语法。我正在尝试从我的“用户”mnesia 表中删除名字为“ryan”(有多个)的“用户”记录。这是我所做的:

Delete=#user{first_name = "ryan", _ = '_'},
mnesia:dirty_delete_object(Delete)

这是我的记录定义:

-record(user, {id,
               username,
               password,
               email,
               first_name,
               last_name,
               last_login, % Date/time user last logged in
               reg_date}). % Date/time user registered the account

这是我遇到的异常:

** exception exit: {aborted,
                       {bad_type,user,
                           {user,'_','_','_','_',"ryan",'_','_','_'}}}
     in function  mnesia:abort/1
     in call from users:register/1

这看起来是绝配。是什么导致了这个问题?

最佳答案

mnesia:delete_object/1/3 用于从表中删除given 记录。它不会根据匹配规范 删除多条记录。它只是 mnesia:delete/* 的更精确版本 - 它为您提供了一种从 bag 表中删除特定 记录的方法。

要删除多个匹配规范的记录(例如使用 name="ryan"),请使用以下代码:

Delete=#user{first_name = "ryan", _ = '_'},
List = mnesia:dirty_match_object(Delete)
lists:foreach(fun(X) ->
                      mnesia:dirty_delete_object(X)
              end, List).

或者它的交易版本:

Delete=#user{first_name = "ryan", _ = '_'},
Fun = fun() ->
              List = mnesia:match_object(Delete)
              lists:foreach(fun(X) ->
                                    mnesia:delete_object(X)
                            end, List)
      end,
mnesia:transaction(Fun).

关于erlang - mnesia delete_object 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/650348/

相关文章:

erlang - 删除待处理的 Mnesia 交易

erlang - edoc 没有在 hrl 文件中生成所有文档类型?

google-apps-script - 通过 Erlang 从 Google Apps 脚本 URL 获取 JSON

concurrency - Erlang 中的 PID 列表

erlang - Mnesia:根据涉及多个索引列的条件选择行时如何正确使用索引操作

erlang - 如何更改/设置:mnesia folder in elixir?

erlang - 最终与 erlang 一致的 mnesia 数据库。最佳实践任何人?

if-statement - Erlang:如何在 if 语句的真实分支中 "Do Nothing"

erlang - 如何加入位串列表?