MongoDB driver based on the official MongoDB GO SDK.
While there is a wonderful community based MongoDB driver, mongo_dart, this package is a less portable package, but one that includes sessions, which we needed urgently but without the time to actually learn MongoDB's protocol. Therefore, the approach was to leverage GO's existing MongoDB driver, which is an official driver. So, this is the closest we have to get an official MongoDB driver for Dart, albeit probably a very incomplete one for now.
It supports the basic features like CRUD operations insertOne
, ..., find
, aggregate
, some slightly more advanced features like watch
. It supports sessions and transactions.
Getting started
In order to use this package:
-
Add this package to your package dependencies on pubspec.yaml.
-
The package requires a dynamic library,
mongo_proxy.so
, which you need to be able to access from your application. Find the physical path to the package and you may either add that path to your library search path, or you may copy or add a symbolic link from the library, to the root of your app's package.
Download the library from https://gitlab.com/squarealfa/dart_framework/-/blob/mongo_improvements/mongo_go/mongo_proxy.so.
import 'package:mongo_go/mongo_go.dart';
void main() async {
// Once during the lifecycle of the application
// if you spawn several Isolates, you do *not* need
// to call initialize on each Isolate, only once for
// all isolates, before any other use of this package.
// This call initializes the communications between
// Dart and the GO package that hosts the MongoDB driver.
Connection.initialize();
// you can keep this as a singleton.
final connection =
await Connection.connectWithString("mongodb://localhost:27021/");
final database = await connection.database("some_database");
final collection = await database.collection("some_collection");
await collection.createOneIndex({'name': 1});
await collection.insertOne({
'name': 'Alice',
'education': 'bachelor',
});
final lst = await collection.find({'name': 'Alice'}).toList();
print(lst);
try {
await connection.withTransaction(
(transaction) async {
await collection.insertOne(
{'name': 'Charles', "test": "trxFail"},
transaction: transaction,
);
await collection.insertOne(
{'name': 'Bob', "test": "trxFail"},
transaction: transaction,
);
throw 'oops';
},
);
} catch (_) {
print(
'Check that neither Charles or Bob were inserted, because we threw \'oops\'');
}
final bachelors = collection.aggregate([
{
'\$match': {'education': 'bachelor'}
}
]);
await for (final batchelor in bachelors) {
print(batchelor['name']);
}
}
Libraries
- gen/aggregate_request.pb
- gen/mongo_proxy/aggregate_request.pb
- gen/aggregate_request.pbenum
- gen/mongo_proxy/aggregate_request.pbenum
- gen/mongo_proxy/aggregate_request.pbjson
- gen/aggregate_request.pbjson
- gen/mongo_proxy/aggregate_request.pbserver
- gen/aggregate_request.pbserver
- gen/google/protobuf/any.pb
- gen/google/protobuf/any.pbenum
- gen/google/protobuf/any.pbjson
- gen/google/protobuf/any.pbserver
- gen/google/protobuf/any_test.pb
- gen/google/protobuf/any_test.pbenum
- gen/google/protobuf/any_test.pbjson
- gen/google/protobuf/any_test.pbserver
- gen/google/protobuf/api.pb
- gen/google/protobuf/api.pbenum
- gen/google/protobuf/api.pbjson
- gen/google/protobuf/api.pbserver
- gen/close_session_request.pb
- gen/mongo_proxy/close_session_request.pb
- gen/close_session_request.pbenum
- gen/mongo_proxy/close_session_request.pbenum
- gen/close_session_request.pbjson
- gen/mongo_proxy/close_session_request.pbjson
- gen/mongo_proxy/close_session_request.pbserver
- gen/close_session_request.pbserver
- gen/mongo_proxy/collection_request.pb
- gen/collection_request.pb
- gen/collection_request.pbenum
- gen/mongo_proxy/collection_request.pbenum
- gen/collection_request.pbjson
- gen/mongo_proxy/collection_request.pbjson
- gen/collection_request.pbserver
- gen/mongo_proxy/collection_request.pbserver
- gen/mongo_proxy/connection_request.pb
- gen/connection_request.pb
- gen/mongo_proxy/connection_request.pbenum
- gen/connection_request.pbenum
- gen/connection_request.pbjson
- gen/mongo_proxy/connection_request.pbjson
- gen/mongo_proxy/connection_request.pbserver
- gen/connection_request.pbserver
- gen/mongo_proxy/database_request.pb
- gen/database_request.pb
- gen/database_request.pbenum
- gen/mongo_proxy/database_request.pbenum
- gen/database_request.pbjson
- gen/mongo_proxy/database_request.pbjson
- gen/database_request.pbserver
- gen/mongo_proxy/database_request.pbserver
- gen/delete_request.pb
- gen/mongo_proxy/delete_request.pb
- gen/mongo_proxy/delete_request.pbenum
- gen/delete_request.pbenum
- gen/mongo_proxy/delete_request.pbjson
- gen/delete_request.pbjson
- gen/delete_request.pbserver
- gen/mongo_proxy/delete_request.pbserver
- gen/google/protobuf/descriptor.pb
- gen/google/protobuf/descriptor.pbenum
- gen/google/protobuf/descriptor.pbjson
- gen/google/protobuf/descriptor.pbserver
- gen/disconnect_request.pb
- gen/mongo_proxy/disconnect_request.pb
- gen/disconnect_request.pbenum
- gen/mongo_proxy/disconnect_request.pbenum
- gen/disconnect_request.pbjson
- gen/mongo_proxy/disconnect_request.pbjson
- gen/disconnect_request.pbserver
- gen/mongo_proxy/disconnect_request.pbserver
- gen/mongo_proxy/drop_database_request.pb
- gen/drop_database_request.pb
- gen/drop_database_request.pbenum
- gen/mongo_proxy/drop_database_request.pbenum
- gen/mongo_proxy/drop_database_request.pbjson
- gen/drop_database_request.pbjson
- gen/drop_database_request.pbserver
- gen/mongo_proxy/drop_database_request.pbserver
- gen/google/protobuf/duration.pb
- gen/google/protobuf/duration.pbenum
- gen/google/protobuf/duration.pbjson
- gen/google/protobuf/duration.pbserver
- gen/google/protobuf/empty.pb
- gen/google/protobuf/empty.pbenum
- gen/google/protobuf/empty.pbjson
- gen/google/protobuf/empty.pbserver
- gen/end_transaction_request.pb
- gen/mongo_proxy/end_transaction_request.pb
- gen/mongo_proxy/end_transaction_request.pbenum
- gen/end_transaction_request.pbenum
- gen/end_transaction_request.pbjson
- gen/mongo_proxy/end_transaction_request.pbjson
- gen/mongo_proxy/end_transaction_request.pbserver
- gen/end_transaction_request.pbserver
- gen/error_message.pb
- gen/mongo_proxy/error_message.pb
- gen/error_message.pbenum
- gen/mongo_proxy/error_message.pbenum
- gen/mongo_proxy/error_message.pbjson
- gen/error_message.pbjson
- gen/error_message.pbserver
- gen/mongo_proxy/error_message.pbserver
- gen/google/protobuf/field_mask.pb
- gen/google/protobuf/field_mask.pbenum
- gen/google/protobuf/field_mask.pbjson
- gen/google/protobuf/field_mask.pbserver
- gen/find_one_request.pb
- gen/mongo_proxy/find_one_request.pb
- gen/mongo_proxy/find_one_request.pbenum
- gen/find_one_request.pbenum
- gen/find_one_request.pbjson
- gen/mongo_proxy/find_one_request.pbjson
- gen/find_one_request.pbserver
- gen/mongo_proxy/find_one_request.pbserver
- gen/find_request.pb
- gen/mongo_proxy/find_request.pb
- gen/find_request.pbenum
- gen/mongo_proxy/find_request.pbenum
- gen/mongo_proxy/find_request.pbjson
- gen/find_request.pbjson
- gen/find_request.pbserver
- gen/mongo_proxy/find_request.pbserver
- gen/index_requests.pb
- gen/mongo_proxy/index_requests.pb
- gen/mongo_proxy/index_requests.pbenum
- gen/index_requests.pbenum
- gen/index_requests.pbjson
- gen/mongo_proxy/index_requests.pbjson
- gen/mongo_proxy/index_requests.pbserver
- gen/index_requests.pbserver
- gen/insert_many_request.pb
- gen/mongo_proxy/insert_many_request.pb
- gen/mongo_proxy/insert_many_request.pbenum
- gen/insert_many_request.pbenum
- gen/mongo_proxy/insert_many_request.pbjson
- gen/insert_many_request.pbjson
- gen/mongo_proxy/insert_many_request.pbserver
- gen/insert_many_request.pbserver
- gen/mongo_proxy/insert_one_request.pb
- gen/insert_one_request.pb
- gen/insert_one_request.pbenum
- gen/mongo_proxy/insert_one_request.pbenum
- gen/mongo_proxy/insert_one_request.pbjson
- gen/insert_one_request.pbjson
- gen/insert_one_request.pbserver
- gen/mongo_proxy/insert_one_request.pbserver
- gen/mongo_proxy/list_database_names_response.pb
- gen/list_database_names_response.pb
- gen/mongo_proxy/list_database_names_response.pbenum
- gen/list_database_names_response.pbenum
- gen/mongo_proxy/list_database_names_response.pbjson
- gen/list_database_names_response.pbjson
- gen/mongo_proxy/list_database_names_response.pbserver
- gen/list_database_names_response.pbserver
- gen/mongo_proxy/list_database_request.pb
- gen/list_database_request.pb
- gen/list_database_request.pbenum
- gen/mongo_proxy/list_database_request.pbenum
- gen/list_database_request.pbjson
- gen/mongo_proxy/list_database_request.pbjson
- gen/list_database_request.pbserver
- gen/mongo_proxy/list_database_request.pbserver
- gen/google/protobuf/map_lite_unittest.pb
- gen/google/protobuf/map_lite_unittest.pbenum
- gen/google/protobuf/map_lite_unittest.pbjson
- gen/google/protobuf/map_lite_unittest.pbserver
- gen/google/protobuf/map_proto2_unittest.pb
- gen/google/protobuf/map_proto2_unittest.pbenum
- gen/google/protobuf/map_proto2_unittest.pbjson
- gen/google/protobuf/map_proto2_unittest.pbserver
- gen/google/protobuf/map_unittest.pb
- gen/google/protobuf/map_unittest.pbenum
- gen/google/protobuf/map_unittest.pbjson
- gen/google/protobuf/map_unittest.pbserver
- mongo_go
- Support for doing something awesome.
- gen/replace_request.pb
- gen/mongo_proxy/replace_request.pb
- gen/mongo_proxy/replace_request.pbenum
- gen/replace_request.pbenum
- gen/replace_request.pbjson
- gen/mongo_proxy/replace_request.pbjson
- gen/mongo_proxy/replace_request.pbserver
- gen/replace_request.pbserver
- gen/request_context.pb
- gen/mongo_proxy/request_context.pb
- gen/request_context.pbenum
- gen/mongo_proxy/request_context.pbenum
- gen/request_context.pbjson
- gen/mongo_proxy/request_context.pbjson
- gen/request_context.pbserver
- gen/mongo_proxy/request_context.pbserver
- gen/google/protobuf/source_context.pb
- gen/google/protobuf/source_context.pbenum
- gen/google/protobuf/source_context.pbjson
- gen/google/protobuf/source_context.pbserver
- gen/start_session_request.pb
- gen/mongo_proxy/start_session_request.pb
- gen/mongo_proxy/start_session_request.pbenum
- gen/start_session_request.pbenum
- gen/mongo_proxy/start_session_request.pbjson
- gen/start_session_request.pbjson
- gen/start_session_request.pbserver
- gen/mongo_proxy/start_session_request.pbserver
- gen/google/protobuf/struct.pb
- gen/google/protobuf/struct.pbenum
- gen/google/protobuf/struct.pbjson
- gen/google/protobuf/struct.pbserver
- gen/google/protobuf/test_messages_proto2.pb
- gen/google/protobuf/test_messages_proto2.pbenum
- gen/google/protobuf/test_messages_proto2.pbjson
- gen/google/protobuf/test_messages_proto2.pbserver
- gen/google/protobuf/test_messages_proto3.pb
- gen/google/protobuf/test_messages_proto3.pbenum
- gen/google/protobuf/test_messages_proto3.pbjson
- gen/google/protobuf/test_messages_proto3.pbserver
- gen/google/protobuf/timestamp.pb
- gen/google/protobuf/timestamp.pbenum
- gen/google/protobuf/timestamp.pbjson
- gen/google/protobuf/timestamp.pbserver
- gen/mongo_proxy/transaction_identifier.pb
- gen/transaction_identifier.pb
- gen/transaction_identifier.pbenum
- gen/mongo_proxy/transaction_identifier.pbenum
- gen/transaction_identifier.pbjson
- gen/mongo_proxy/transaction_identifier.pbjson
- gen/mongo_proxy/transaction_identifier.pbserver
- gen/transaction_identifier.pbserver
- gen/google/protobuf/type.pb
- gen/google/protobuf/type.pbenum
- gen/google/protobuf/type.pbjson
- gen/google/protobuf/type.pbserver
- gen/google/protobuf/unittest.pb
- gen/google/protobuf/unittest.pbenum
- gen/google/protobuf/unittest.pbjson
- gen/google/protobuf/unittest.pbserver
- gen/google/protobuf/unittest_arena.pb
- gen/google/protobuf/unittest_arena.pbenum
- gen/google/protobuf/unittest_arena.pbjson
- gen/google/protobuf/unittest_arena.pbserver
- gen/google/protobuf/unittest_custom_options.pb
- gen/google/protobuf/unittest_custom_options.pbenum
- gen/google/protobuf/unittest_custom_options.pbjson
- gen/google/protobuf/unittest_custom_options.pbserver
- gen/google/protobuf/unittest_drop_unknown_fields.pb
- gen/google/protobuf/unittest_drop_unknown_fields.pbenum
- gen/google/protobuf/unittest_drop_unknown_fields.pbjson
- gen/google/protobuf/unittest_drop_unknown_fields.pbserver
- gen/google/protobuf/unittest_embed_optimize_for.pb
- gen/google/protobuf/unittest_embed_optimize_for.pbenum
- gen/google/protobuf/unittest_embed_optimize_for.pbjson
- gen/google/protobuf/unittest_embed_optimize_for.pbserver
- gen/google/protobuf/unittest_empty.pb
- gen/google/protobuf/unittest_empty.pbenum
- gen/google/protobuf/unittest_empty.pbjson
- gen/google/protobuf/unittest_empty.pbserver
- gen/google/protobuf/unittest_enormous_descriptor.pb
- gen/google/protobuf/unittest_enormous_descriptor.pbenum
- gen/google/protobuf/unittest_enormous_descriptor.pbjson
- gen/google/protobuf/unittest_enormous_descriptor.pbserver
- gen/google/protobuf/unittest_import.pb
- gen/google/protobuf/unittest_import.pbenum
- gen/google/protobuf/unittest_import.pbjson
- gen/google/protobuf/unittest_import.pbserver
- gen/google/protobuf/unittest_import_lite.pb
- gen/google/protobuf/unittest_import_lite.pbenum
- gen/google/protobuf/unittest_import_lite.pbjson
- gen/google/protobuf/unittest_import_lite.pbserver
- gen/google/protobuf/unittest_import_public.pb
- gen/google/protobuf/unittest_import_public.pbenum
- gen/google/protobuf/unittest_import_public.pbjson
- gen/google/protobuf/unittest_import_public.pbserver
- gen/google/protobuf/unittest_import_public_lite.pb
- gen/google/protobuf/unittest_import_public_lite.pbenum
- gen/google/protobuf/unittest_import_public_lite.pbjson
- gen/google/protobuf/unittest_import_public_lite.pbserver
- gen/google/protobuf/unittest_lazy_dependencies.pb
- gen/google/protobuf/unittest_lazy_dependencies.pbenum
- gen/google/protobuf/unittest_lazy_dependencies.pbjson
- gen/google/protobuf/unittest_lazy_dependencies.pbserver
- gen/google/protobuf/unittest_lazy_dependencies_custom_option.pb
- gen/google/protobuf/unittest_lazy_dependencies_custom_option.pbenum
- gen/google/protobuf/unittest_lazy_dependencies_custom_option.pbjson
- gen/google/protobuf/unittest_lazy_dependencies_custom_option.pbserver
- gen/google/protobuf/unittest_lazy_dependencies_enum.pb
- gen/google/protobuf/unittest_lazy_dependencies_enum.pbenum
- gen/google/protobuf/unittest_lazy_dependencies_enum.pbjson
- gen/google/protobuf/unittest_lazy_dependencies_enum.pbserver
- gen/google/protobuf/unittest_lite.pb
- gen/google/protobuf/unittest_lite.pbenum
- gen/google/protobuf/unittest_lite.pbjson
- gen/google/protobuf/unittest_lite.pbserver
- gen/google/protobuf/unittest_lite_imports_nonlite.pb
- gen/google/protobuf/unittest_lite_imports_nonlite.pbenum
- gen/google/protobuf/unittest_lite_imports_nonlite.pbjson
- gen/google/protobuf/unittest_lite_imports_nonlite.pbserver
- gen/google/protobuf/unittest_mset.pb
- gen/google/protobuf/unittest_mset.pbenum
- gen/google/protobuf/unittest_mset.pbjson
- gen/google/protobuf/unittest_mset.pbserver
- gen/google/protobuf/unittest_mset_wire_format.pb
- gen/google/protobuf/unittest_mset_wire_format.pbenum
- gen/google/protobuf/unittest_mset_wire_format.pbjson
- gen/google/protobuf/unittest_mset_wire_format.pbserver
- gen/google/protobuf/unittest_no_field_presence.pb
- gen/google/protobuf/unittest_no_field_presence.pbenum
- gen/google/protobuf/unittest_no_field_presence.pbjson
- gen/google/protobuf/unittest_no_field_presence.pbserver
- gen/google/protobuf/unittest_no_generic_services.pb
- gen/google/protobuf/unittest_no_generic_services.pbenum
- gen/google/protobuf/unittest_no_generic_services.pbjson
- gen/google/protobuf/unittest_no_generic_services.pbserver
- gen/google/protobuf/unittest_optimize_for.pb
- gen/google/protobuf/unittest_optimize_for.pbenum
- gen/google/protobuf/unittest_optimize_for.pbjson
- gen/google/protobuf/unittest_optimize_for.pbserver
- gen/google/protobuf/unittest_preserve_unknown_enum.pb
- gen/google/protobuf/unittest_preserve_unknown_enum.pbenum
- gen/google/protobuf/unittest_preserve_unknown_enum.pbjson
- gen/google/protobuf/unittest_preserve_unknown_enum.pbserver
- gen/google/protobuf/unittest_preserve_unknown_enum2.pb
- gen/google/protobuf/unittest_preserve_unknown_enum2.pbenum
- gen/google/protobuf/unittest_preserve_unknown_enum2.pbjson
- gen/google/protobuf/unittest_preserve_unknown_enum2.pbserver
- gen/google/protobuf/unittest_proto3.pb
- gen/google/protobuf/unittest_proto3.pbenum
- gen/google/protobuf/unittest_proto3.pbjson
- gen/google/protobuf/unittest_proto3.pbserver
- gen/google/protobuf/unittest_proto3_arena.pb
- gen/google/protobuf/unittest_proto3_arena.pbenum
- gen/google/protobuf/unittest_proto3_arena.pbjson
- gen/google/protobuf/unittest_proto3_arena.pbserver
- gen/google/protobuf/unittest_proto3_arena_lite.pb
- gen/google/protobuf/unittest_proto3_arena_lite.pbenum
- gen/google/protobuf/unittest_proto3_arena_lite.pbjson
- gen/google/protobuf/unittest_proto3_arena_lite.pbserver
- gen/google/protobuf/unittest_proto3_lite.pb
- gen/google/protobuf/unittest_proto3_lite.pbenum
- gen/google/protobuf/unittest_proto3_lite.pbjson
- gen/google/protobuf/unittest_proto3_lite.pbserver
- gen/google/protobuf/unittest_proto3_optional.pb
- gen/google/protobuf/unittest_proto3_optional.pbenum
- gen/google/protobuf/unittest_proto3_optional.pbjson
- gen/google/protobuf/unittest_proto3_optional.pbserver
- gen/google/protobuf/unittest_well_known_types.pb
- gen/google/protobuf/unittest_well_known_types.pbenum
- gen/google/protobuf/unittest_well_known_types.pbjson
- gen/google/protobuf/unittest_well_known_types.pbserver
- gen/mongo_proxy/update_request.pb
- gen/update_request.pb
- gen/update_request.pbenum
- gen/mongo_proxy/update_request.pbenum
- gen/mongo_proxy/update_request.pbjson
- gen/update_request.pbjson
- gen/mongo_proxy/update_request.pbserver
- gen/update_request.pbserver
- gen/mongo_proxy/with_transaction_request.pb
- gen/with_transaction_request.pb
- gen/with_transaction_request.pbenum
- gen/mongo_proxy/with_transaction_request.pbenum
- gen/mongo_proxy/with_transaction_request.pbjson
- gen/with_transaction_request.pbjson
- gen/mongo_proxy/with_transaction_request.pbserver
- gen/with_transaction_request.pbserver
- gen/google/protobuf/wrappers.pb
- gen/google/protobuf/wrappers.pbenum
- gen/google/protobuf/wrappers.pbjson
- gen/google/protobuf/wrappers.pbserver