исключение mnesia delete_object? - PullRequest
2 голосов
/ 16 марта 2009

Я не вижу, что здесь не так, но я могу просто неправильно понять синтаксис. Я пытаюсь удалить запись "user" из моей таблицы mnesia "user" с именем "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

Кажется, идеальная пара. Что может вызвать эту проблему?

1 Ответ

12 голосов
/ 16 марта 2009

mnesia:delete_object/1 и /3 используются для удаления заданной записи из таблицы. Он не удаляет несколько записей на основе соответствия спецификации . Это просто более точная версия 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).
...