Implements: IReferenceable, IUnreferenceable, IConfigurable, IOpenable, ICleanable
Description
The MongoDbPersistence class allows you to create persistence components that store data in MongoDB databases using the official MongoDB driver.
Important points
- This is the most basic persistence component that is only able to store data items of any type.
- Specific CRUD operations over the data items must be implemented in child classes by accessing the _collection property.
Configuration parameters
- collection: (optional) MongoDB collection name
connection(s):
- discovery_key: (optional) key to retrieve the connection from IDiscovery
- host: host name or IP address
- port: port number (default: 27017)
- uri: resource URI or connection string with all parameters in it
credential(s):
- store_key: (optional) key to retrieve the credentials from ICredentialStore
- username: (optional) username
- password: (optional) user’s password
options:
- max_pool_size: (optional) maximum connection pool size (default: 2)
- keep_alive: (optional) enable connection keep alive (default: true)
- connect_timeout: (optional) connection timeout in milliseconds (default: 5000)
- socket_timeout: (optional) socket timeout in milliseconds (default: 360000)
- auto_reconnect: (optional) enable auto reconnection (default: true)
- reconnect_interval: (optional) reconnection interval in milliseconds (default: 1000)
- max_page_size: (optional) maximum page size (default: 100)
- replica_set: (optional) name of replica set
- ssl: (optional) enable SSL connection (default: false)
- auth_source: (optional) authentication source
- debug: (optional) enable debug output (default: false).
References
- *:logger:*:*:1.0 - (optional) ILogger components to pass log messages
- *:discovery:*:*:1.0 - (optional) IDiscovery services
- *:credential-store:*:*:1.0 - (optional) credential stores to resolve credentials
Constructors
Creates a new instance of the persistence component.
MongoDbPersistence([String? collection])
- collection: String? - (optional) collection name.
Fields
Instance methods
clear
Clears a component’s state.
@override
Future clear(IContext? context)
- context: IContext - (optional) a context to trace execution through a call chain.
close
Closes the component and frees used resources.
@override
Future close(IContext? context)
- context: IContext - (optional) a context to trace execution through a call chain.
configure
Closes the component and frees used resources.
@override
void configure(ConfigParams config)
- config: ConfigParams - configuration parameters to be set.
convertFromPublic
Converts an object value from public to internal format.
Map<String, dynamic>? convertFromPublic(dynamic item, {bool createUid = false})
- value: dynamic - object in public format to convert.
- createUid: bool - autocreation flag Uid
- returns: Map<String, dynamic>? - converted object in internal format.
convertFromPublicPartial
Converts the given object from the public partial format.
Map<String, dynamic>? convertFromPublicPartial(Map<String, dynamic>? item)
- item: Map<String, dynamic>? - the object to convert from the public partial format.
- returns: Map<String, dynamic>? - the initial object.
convertToPublic
Converts and object value from internal to public format.
dynamic convertToPublic(Map<String, dynamic>? item)
- value: dynamic - object in internal format to convert.
- returns: Map<String, dynamic>? - converted object in public format.
create
Creates a data item.
Future<T?> create(IContext? context, T? item)
- context: IContext - (optional) a context to trace execution through a call chain.
- item: T? - item to be created.
- returns: Future<T?> - created item
deleteByFilter
This method shall be called by a public deleteByFilter method from the child class that receives FilterParams and converts them into a filter function.
Future deleteByFilterEx(IContext? context, Map<String, dynamic> filter)
- context: IContext - (optional) a context to trace execution through a call chain.
- filter: Map<String, dynamic> - (optional) filter function used to filter items.
ensureIndex
Adds index definition to create it on opening.
void ensureIndex(keys, {String key, bool unique = false, bool sparse = false, bool background = false, bool dropDups = false, Map<String, dynamic> partialFilterExpression, String name})
- keys: dynamic - index keys (fields)
- key: String - index options
- unique: bool - TODO: add description
- sparse: bool - TODO: add description
- background: bool - TODO: add description
- dropDups: bool - TODO: add description
- partialFilterExpression: Map<String, dynamic> - TODO: add description
- name: String - TODO: add description
getCountByFilter
Gets a number of data items retrieved by a given filter.
This method shall be called by a public getCountByFilter method from the child class that receives FilterParams and converts them into a filter function.
Future<int> getCountByFilterEx(IContext? context, Map<String, dynamic>? filter)
- context: IContext - (optional) a context to trace execution through a call chain.
- filter: Map<String, dynamic>? - (optional) filter JSON object
- returns: Future<int> - number of filtered items.
getListByFilter
Gets a list of data items retrieved by a given filter and sorted according to sort parameters.
This method shall be called by a public getListByFilter method from the child class that receives FilterParams and converts them into a filter function.
Future<List<T>> getListByFilterEx(IContext? context, Map<String, dynamic>? filter, Map<String, dynamic>? sort)
- context: IContext - (optional) a context to trace execution through a call chain.
- filter: Map<String, dynamic>? - (optional) filter function used to filter items
- sort: Map<String, dynamic>? - (optional) sorting parameters
- returns: Future<List<T>> - data list of results by filter.
getOneRandom
Gets a random item from items that match to a given filter.
This method shall be called by a public getOneRandom method from the child class that receives FilterParams and converts them into a filter function.
Future<T?> getOneRandom(IContext? context, Map<String, dynamic> filter)
- context: IContext - (optional) a context to trace execution through a call chain.
- filter: Map<String, dynamic> - fileter JSON object.
- returns: Future<T?> - random item.
getPageByFilter
Gets a page of data items retrieved by a given filter and sorted according to sort parameters.
This method shall be called by a public getPageByFilter method from the child class that receives FilterParams and converts them into a filter function.
Future<DataPage<T>> getPageByFilterEx(IContext? context, Map<String, dynamic> filter, PagingParams paging, Map<String, dynamic> sort)
- context: IContext - (optional) a context to trace execution through a call chain.
- filter: Map<String, dynamic> - (optional) filter JSON object
- paging: PagingParams - (optional) paging parameters
- sort: Map<String, dynamic> - (optional) sorting JSON object
- returns: Future<DataPage<T>> - data page obtained by filtering
Examples
class MyMongoDbPersistence extends MongoDbPersistence<MyData> {
MyMongoDbPersistence():base('mydata');
Future<MyData> getByName(IContext? context, String name) {
var filter = {'name': name};
var query = mngquery.SelectorBuilder();
var selector = <String, dynamic>{};
selector[r'$query'] = filter;
query.raw(selector);
var item = await collection.findOne(filter);
if (item == null) {
return null;
}
item = convertToPublic(item);
var instance = MyData.fromJson(item);
return instance;
});
Future<MyData> set(String correlatonId, MyData item) {
if (item == null) {
return null;
}
var jsonMap = json.decode(json.encode(item));
// Assign unique id
if (jsonMap['id'] == null) {
jsonMap['id'] = IdGenerator.nextLong();
}
convertFromPublic(jsonMap);
var filter = {r'$query': {'name': jsonMap['name']}};
var result = await collection.findAndModify(
query: filter, update: jsonMap, returnNew: true, upsert: true);
if (result != null) {
convertToPublic(result);
var newItem = MyData.fromJson(result);;
return newItem;
}
return null;
}
}
var persistence = MyMongoDbPersistence();
persistence.configure(ConfigParams.fromTuples([
'host', 'localhost',
'port', 27017
]));
await persitence.open('123');
await persistence.set('123', { name: 'ABC' });
var item = await persistence.getByName('123', 'ABC');
print(item); // Result: { name: 'ABC' }