2016-03-07 85 views
4

我是新來的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 

我怎樣才能循環添加到我的代碼,執行某些操作的所有記錄?

我甚至不確定上面的代碼是否做到這一點?

回答

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) 
1

我想你可以嘗試all_keys(TAB)

all_keys(表) - >鍵列表|事務中止

該函數返回名爲Tab的表中所有鍵的列表。該函數的語義是上下文敏感的。有關更多信息,請參閱mnesia:activity/4 。在事務上下文中,它獲取整個表上的讀鎖 。

相關問題