如何在erlang中读取mnesia数据库的所有记录?

Bes*_*sat 5 erlang mnesia

我是erlang中的新手,我需要对从mnesia数据库获得的所有记录进行一些操作.

Result = mnesia:dirty_read(mydatabase, {key1, key2}),
        case Result of 
            [] ->
                ?DEBUG("No such record found", []);
            [#mydatabase{key3 = Key3}] ->
                %% some operations
        end
Run Code Online (Sandbox Code Playgroud)

如何为我的代码添加一个循环,为所有记录执行一些操作?

我甚至不确定上面的代码是否做到了?

leg*_*cia 6

你可以用mnesia:foldl/3它.它迭代表中的所有记录,传递"累加器"值.

它没有明确的"脏"对应物,因此如果要将其作为脏操作运行,则需要使用mnesia:activity/2.(或者你可以在通话中使用它mnesia:transaction.)

在这个例子中,我实际上并没有对"累加器"做任何事情ignored_acc.

mnesia:activity(sync_dirty,
  fun() ->
      mnesia:foldl(
          fun(#mydatabase{}, Acc) ->
              %% do something with the record here
              Acc
          end,
          ignored_acc,
          my_table)
  end)
Run Code Online (Sandbox Code Playgroud)