4

MongoDB からタプルを変換するにはどうすればよいですか

{'_id',<<"vasya">>,password,<<"12ghd">>,age,undefined}

提案する

[{'_id',<<"vasya">>},{password,<<"12ghd">>},{age,undefined}]
4

4 に答える 4

4

タプルの 2 つの連続する要素を基本的に結合したいと仮定すると、これはそれほど難しくありません。element\2タプルから要素をプルするために使用できます。そしてtuple_size\1、タプルのサイズを取得します。これを処理するには、次の 2 つの方法があります。

1> Tup = {'_id',<<"vasya">>,password,<<"12ghd">>,age,undefined}.
{'_id',<<"vasya">>,password,<<"12ghd">>,age,undefined}
2> Size = tuple_size(Tup).            
6

これにはリスト内包表記を使用できます。

3> [{element(X, Tup), element(X+1, Tup)} || X <- lists:seq(1, Size, 2)].
[{'_id',<<"vasya">>},{password,<<"12ghd">>},{age,undefined}]

または、圧縮することもできます:

4> lists:zip([element(X, Tup) || X <- lists:seq(1, Size, 2)], [element(X, Tup) || X <- lists:seq(2, Size, 2)]).
[{'_id',<<"vasya">>},{password,<<"12ghd">>},{age,undefined}]

要素の引き出しを処理する関数を作成することで、そのジッパーをクリーンアップできます。

slice(Tuple, Start, Stop, Step) ->
    [element(N, Tuple) || N <- lists:seq(Start, Stop, Step)].

次に、この関数を呼び出します。

5> lists:zip(slice(Tup, 1, Size, 2), Slice(Tup, 2, Size, 2)).
[{'_id',<<"vasya">>},{password,<<"12ghd">>},{age,undefined}]
于 2013-05-29T15:19:27.637 に答える
1

You can use bson:fields/1 (https://github.com/mongodb/bson-erlang/blob/master/src/bson.erl#L52). bson is the dependency of mongodb erlang driver

于 2013-05-30T08:49:54.983 に答える