Packages
gleam_mongo
0.1.2
0.18.1
retired
0.18.0
retired
0.17.0
retired
0.16.0
retired
0.15.1
retired
0.15.0
retired
0.14.0
retired
0.13.0
retired
0.12.0
retired
0.11.0
retired
0.10.0
retired
0.9.0
retired
0.8.0
retired
0.7.0
retired
0.6.0
retired
0.5.0
retired
0.4.0
retired
0.3.0
0.2.0
retired
0.1.3
retired
0.1.2
retired
0.1.1
retired
0.1.0
retired
A mongodb driver for gleam
Retired package: Renamed - Republished as mungo
Current section
Files
Jump to
Current section
Files
src/mongo@crud.erl
-module(mongo@crud).
-compile(no_auto_import).
-export([insert_many/2, insert_one/2, find/3, find_all/2, update_many/4, update_one/4, delete_many/2, delete_one/2, count/2, count_all/1]).
-export_type([mongo_error/0, update_result/0]).
-type mongo_error() :: {mongo_error, integer(), binary(), bson@types:value()}.
-type update_result() :: {update_result, integer(), integer()} |
{upsert_result, integer(), bson@object_id:object_id()}.
-spec insert_many(mongo@client:collection(), list(bson@types:value())) -> {ok,
integer()} |
{error, mongo_error()}.
insert_many(Collection, Docs) ->
case begin
_pipe = Docs,
gleam@list:all(_pipe, fun(Doc) -> case Doc of
{document, _@1} ->
true;
_@2 ->
false
end end)
end of
true ->
case mongo@client:execute(
Collection,
{document,
[{<<"documents"/utf8>>, {array, Docs}},
{<<"insert"/utf8>>, {str, erlang:element(3, Collection)}}]}
) of
{ok, [{<<"ok"/utf8>>, Ok}, {<<"n"/utf8>>, {integer, N}}]} ->
case Ok of
{double, 1.0} ->
{ok, N};
_@3 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
{ok,
[{<<"ok"/utf8>>, Ok@1},
{<<"writeErrors"/utf8>>, {array, Errors}},
{<<"n"/utf8>>, _@4}]} ->
case Ok@1 of
{double, 1.0} ->
{ok, Error@1} = case gleam@list:first(Errors) of
{ok, Error} -> {ok, Error};
_try ->
erlang:error(#{gleam_error => assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _try,
module => <<"mongo/crud"/utf8>>,
function => <<"insert_many"/utf8>>,
line => 45})
end,
case Error@1 of
{document,
[{<<"errmsg"/utf8>>, {str, Msg}},
{<<"keyValue"/utf8>>, Source},
{<<"keyPattern"/utf8>>, _@5},
{<<"code"/utf8>>, {integer, Code}},
{<<"index"/utf8>>, _@6}]} ->
{error, {mongo_error, Code, Msg, Source}};
_@7 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
_@8 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
{error, nil} ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
false ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end.
-spec insert_one(mongo@client:collection(), bson@types:value()) -> {ok,
integer()} |
{error, mongo_error()}.
insert_one(Collection, Doc) ->
insert_many(Collection, [Doc]).
-spec find(
mongo@client:collection(),
bson@types:value(),
list(mongo@utils:find_option())
) -> {ok, list(bson@types:value())} | {error, mongo_error()}.
find(Collection, Filter, Options) ->
case Filter of
{document, _@1} ->
Body = [{<<"filter"/utf8>>, Filter},
{<<"find"/utf8>>, {str, erlang:element(3, Collection)}}],
Options@1 = begin
_pipe = Options,
gleam@list:fold(_pipe, [], fun(Acc, Opt) -> case Opt of
{sort, {document, Sort}} ->
[{<<"sort"/utf8>>, {document, Sort}} | Acc];
{projection, {document, Projection}} ->
[{<<"projection"/utf8>>, {document, Projection}} |
Acc];
{skip, Skip} ->
[{<<"skip"/utf8>>, {integer, Skip}} | Acc];
{limit, Limit} ->
[{<<"limit"/utf8>>, {integer, Limit}} | Acc]
end end)
end,
Body@1 = gleam@list:append(Options@1, Body),
case mongo@client:execute(Collection, {document, Body@1}) of
{ok, Result} ->
[{<<"ok"/utf8>>, Ok},
{<<"cursor"/utf8>>, {document, Result@1}}] = Result,
[{<<"ns"/utf8>>, _@2},
{<<"id"/utf8>>, _@3},
{<<"firstBatch"/utf8>>, {array, Docs}}] = Result@1,
case Ok of
{double, 1.0} ->
{ok, Docs};
_@4 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
{error, nil} ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
_@5 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end.
-spec find_all(mongo@client:collection(), list(mongo@utils:find_option())) -> {ok,
list(bson@types:value())} |
{error, mongo_error()}.
find_all(Collection, Options) ->
Body = [{<<"find"/utf8>>, {str, erlang:element(3, Collection)}}],
Options@1 = begin
_pipe = Options,
gleam@list:fold(_pipe, [], fun(Acc, Opt) -> case Opt of
{sort, {document, Sort}} ->
[{<<"sort"/utf8>>, {document, Sort}} | Acc];
{projection, {document, Projection}} ->
[{<<"projection"/utf8>>, {document, Projection}} | Acc];
{skip, Skip} ->
[{<<"skip"/utf8>>, {integer, Skip}} | Acc];
{limit, Limit} ->
[{<<"limit"/utf8>>, {integer, Limit}} | Acc]
end end)
end,
Body@1 = gleam@list:append(Options@1, Body),
case mongo@client:execute(Collection, {document, Body@1}) of
{ok, Result} ->
[{<<"ok"/utf8>>, Ok}, {<<"cursor"/utf8>>, {document, Result@1}}] = Result,
[{<<"ns"/utf8>>, _@1},
{<<"id"/utf8>>, _@2},
{<<"firstBatch"/utf8>>, {array, Docs}}] = Result@1,
case Ok of
{double, 1.0} ->
{ok, Docs};
_@3 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
{error, nil} ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end.
-spec update_many(
mongo@client:collection(),
bson@types:value(),
bson@types:value(),
list(mongo@utils:update_option())
) -> {ok, update_result()} | {error, mongo_error()}.
update_many(Collection, Filter, Change, Options) ->
case Filter of
{document, _@1} ->
case Change of
{document, _@2} ->
Update = [{<<"q"/utf8>>, Filter},
{<<"u"/utf8>>, Change},
{<<"multi"/utf8>>, {boolean, true}}],
Options@1 = begin
_pipe = Options,
gleam@list:fold(_pipe, [], fun(Acc, Opt) -> case Opt of
{upsert, Upsert} ->
[{<<"upsert"/utf8>>, {boolean, Upsert}} |
Acc];
{array_filters, Filters} ->
[{<<"arrayFilters"/utf8>>,
{array, Filters}} |
Acc]
end end)
end,
Update@1 = {document, gleam@list:append(Update, Options@1)},
case mongo@client:execute(
Collection,
{document,
[{<<"updates"/utf8>>, {array, [Update@1]}},
{<<"update"/utf8>>,
{str, erlang:element(3, Collection)}}]}
) of
{ok,
[{<<"ok"/utf8>>, Ok},
{<<"nModified"/utf8>>, {integer, Modified}},
{<<"n"/utf8>>, {integer, N}}]} ->
case Ok of
{double, 1.0} ->
{ok, {update_result, N, Modified}};
_@3 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
{ok,
[{<<"ok"/utf8>>, Ok@1},
{<<"nModified"/utf8>>, _@4},
{<<"upserted"/utf8>>,
{array,
[{document,
[{<<"_id"/utf8>>, {object_id, Upserted}},
{<<"index"/utf8>>, _@5}]}]}},
{<<"n"/utf8>>, {integer, N@1}}]} ->
case Ok@1 of
{double, 1.0} ->
{ok, {upsert_result, N@1, Upserted}};
_@6 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
{ok,
[{<<"ok"/utf8>>, Ok@2},
{<<"nModified"/utf8>>, _@7},
{<<"writeErrors"/utf8>>, {array, Errors}},
{<<"n"/utf8>>, _@8}]} ->
case Ok@2 of
{double, 1.0} ->
{ok, Error@1} = case gleam@list:first(
Errors
) of
{ok, Error} -> {ok, Error};
_try ->
erlang:error(
#{gleam_error => assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _try,
module => <<"mongo/crud"/utf8>>,
function => <<"update_many"/utf8>>,
line => 228}
)
end,
case Error@1 of
{document,
[{<<"errmsg"/utf8>>, {str, Msg}},
{<<"keyValue"/utf8>>, Source},
{<<"keyPattern"/utf8>>, _@9},
{<<"code"/utf8>>, {integer, Code}},
{<<"index"/utf8>>, _@10}]} ->
{error,
{mongo_error, Code, Msg, Source}};
_@11 ->
{error,
{mongo_error, 0, <<""/utf8>>, null}}
end;
_@12 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
{error, nil} ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
_@13 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
_@14 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end.
-spec update_one(
mongo@client:collection(),
bson@types:value(),
bson@types:value(),
list(mongo@utils:update_option())
) -> {ok, update_result()} | {error, mongo_error()}.
update_one(Collection, Filter, Change, Options) ->
case Filter of
{document, _@1} ->
case Change of
{document, _@2} ->
Update = [{<<"q"/utf8>>, Filter},
{<<"u"/utf8>>, Change},
{<<"multi"/utf8>>, {boolean, false}}],
Options@1 = begin
_pipe = Options,
gleam@list:fold(_pipe, [], fun(Acc, Opt) -> case Opt of
{upsert, Upsert} ->
[{<<"upsert"/utf8>>, {boolean, Upsert}} |
Acc];
{array_filters, Filters} ->
[{<<"arrayFilters"/utf8>>,
{array, Filters}} |
Acc]
end end)
end,
Update@1 = {document, gleam@list:append(Update, Options@1)},
case mongo@client:execute(
Collection,
{document,
[{<<"updates"/utf8>>, {array, [Update@1]}},
{<<"update"/utf8>>,
{str, erlang:element(3, Collection)}}]}
) of
{ok,
[{<<"ok"/utf8>>, Ok},
{<<"nModified"/utf8>>, {integer, Modified}},
{<<"n"/utf8>>, {integer, N}}]} ->
case Ok of
{double, 1.0} ->
{ok, {update_result, N, Modified}};
_@3 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
{ok,
[{<<"ok"/utf8>>, Ok@1},
{<<"nModified"/utf8>>, _@4},
{<<"upserted"/utf8>>,
{array,
[{document,
[{<<"_id"/utf8>>, {object_id, Upserted}},
{<<"index"/utf8>>, _@5}]}]}},
{<<"n"/utf8>>, {integer, N@1}}]} ->
case Ok@1 of
{double, 1.0} ->
{ok, {upsert_result, N@1, Upserted}};
_@6 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
{ok,
[{<<"ok"/utf8>>, Ok@2},
{<<"nModified"/utf8>>, _@7},
{<<"writeErrors"/utf8>>, {array, Errors}},
{<<"n"/utf8>>, _@8}]} ->
case Ok@2 of
{double, 1.0} ->
{ok, Error@1} = case gleam@list:first(
Errors
) of
{ok, Error} -> {ok, Error};
_try ->
erlang:error(
#{gleam_error => assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _try,
module => <<"mongo/crud"/utf8>>,
function => <<"update_one"/utf8>>,
line => 326}
)
end,
case Error@1 of
{document,
[{<<"errmsg"/utf8>>, {str, Msg}},
{<<"keyValue"/utf8>>, Source},
{<<"keyPattern"/utf8>>, _@9},
{<<"code"/utf8>>, {integer, Code}},
{<<"index"/utf8>>, _@10}]} ->
{error,
{mongo_error, Code, Msg, Source}};
_@11 ->
{error,
{mongo_error, 0, <<""/utf8>>, null}}
end;
_@12 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
{error, nil} ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
_@13 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
_@14 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end.
-spec delete_many(mongo@client:collection(), bson@types:value()) -> {ok,
integer()} |
{error, mongo_error()}.
delete_many(Collection, Filter) ->
case Filter of
{document, _@1} ->
case mongo@client:execute(
Collection,
{document,
[{<<"deletes"/utf8>>,
{array,
[{document,
[{<<"q"/utf8>>, Filter}, {<<"limit"/utf8>>, {integer, 0}}]}]}},
{<<"delete"/utf8>>, {str, erlang:element(3, Collection)}}]}
) of
{ok, [{<<"ok"/utf8>>, Ok}, {<<"n"/utf8>>, {integer, N}}]} ->
case Ok of
{double, 1.0} ->
{ok, N};
_@2 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
{ok,
[{<<"ok"/utf8>>, Ok@1},
{<<"writeErrors"/utf8>>, {array, Errors}},
{<<"n"/utf8>>, _@3}]} ->
case Ok@1 of
{double, 1.0} ->
{ok, Error@1} = case gleam@list:first(Errors) of
{ok, Error} -> {ok, Error};
_try ->
erlang:error(#{gleam_error => assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _try,
module => <<"mongo/crud"/utf8>>,
function => <<"delete_many"/utf8>>,
line => 372})
end,
case Error@1 of
{document,
[{<<"errmsg"/utf8>>, {str, Msg}},
{<<"keyValue"/utf8>>, Source},
{<<"keyPattern"/utf8>>, _@4},
{<<"code"/utf8>>, {integer, Code}},
{<<"index"/utf8>>, _@5}]} ->
{error, {mongo_error, Code, Msg, Source}};
_@6 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
_@7 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
{error, nil} ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
_@8 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end.
-spec delete_one(mongo@client:collection(), bson@types:value()) -> {ok,
integer()} |
{error, mongo_error()}.
delete_one(Collection, Filter) ->
case Filter of
{document, _@1} ->
case mongo@client:execute(
Collection,
{document,
[{<<"deletes"/utf8>>,
{array,
[{document,
[{<<"q"/utf8>>, Filter}, {<<"limit"/utf8>>, {integer, 1}}]}]}},
{<<"delete"/utf8>>, {str, erlang:element(3, Collection)}}]}
) of
{ok, [{<<"ok"/utf8>>, Ok}, {<<"n"/utf8>>, {integer, N}}]} ->
case Ok of
{double, 1.0} ->
{ok, N};
_@2 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
{ok,
[{<<"ok"/utf8>>, Ok@1},
{<<"writeErrors"/utf8>>, {array, Errors}},
{<<"n"/utf8>>, _@3}]} ->
case Ok@1 of
{double, 1.0} ->
{ok, Error@1} = case gleam@list:first(Errors) of
{ok, Error} -> {ok, Error};
_try ->
erlang:error(#{gleam_error => assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => _try,
module => <<"mongo/crud"/utf8>>,
function => <<"delete_one"/utf8>>,
line => 415})
end,
case Error@1 of
{document,
[{<<"errmsg"/utf8>>, {str, Msg}},
{<<"keyValue"/utf8>>, Source},
{<<"keyPattern"/utf8>>, _@4},
{<<"code"/utf8>>, {integer, Code}},
{<<"index"/utf8>>, _@5}]} ->
{error, {mongo_error, Code, Msg, Source}};
_@6 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
_@7 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
{error, nil} ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
_@8 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end.
-spec count(mongo@client:collection(), bson@types:value()) -> {ok, integer()} |
{error, mongo_error()}.
count(Collection, Filter) ->
case Filter of
{document, _@1} ->
case mongo@client:execute(
Collection,
{document,
[{<<"query"/utf8>>, Filter},
{<<"count"/utf8>>, {str, erlang:element(3, Collection)}}]}
) of
{ok, [{<<"ok"/utf8>>, Ok}, {<<"n"/utf8>>, {integer, N}}]} ->
case Ok of
{double, 1.0} ->
{ok, N};
_@2 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
{error, nil} ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
_@3 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end.
-spec count_all(mongo@client:collection()) -> {ok, integer()} |
{error, mongo_error()}.
count_all(Collection) ->
case mongo@client:execute(
Collection,
{document, [{<<"count"/utf8>>, {str, erlang:element(3, Collection)}}]}
) of
{ok, [{<<"ok"/utf8>>, Ok}, {<<"n"/utf8>>, {integer, N}}]} ->
case Ok of
{double, 1.0} ->
{ok, N};
_@1 ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end;
{error, nil} ->
{error, {mongo_error, 0, <<""/utf8>>, null}}
end.