A Delphi component (with connection pool) to access a mongoDB server. a connection pool is a cache of database connections maintained so that the connections can be reused when future requests to the database are required. In connection pooling, after a connection is created, it is placed in the pool and it is used over again so that a new connection does not have to be established. If all the connections are being used, a new connection is made and is added to the pool. Connection pooling also cuts down on the amount of time a user must wait to establish a connection to the database.
:::delphi
aJSONDoc := TALJSONDocument.create;
aMongoDBClient := TAlMongoDBClient.create;
try
aMongoDBClient.Connect('', 0);
aMongoDBClient.SelectData('test.exemple',
'{fieldA:123}', // the query
'{fieldA:1, fieldB:1}', // the return fields selector
aJSONDoc.node);
aMongoDBClient.disconnect;
for i := 0 to aJSONDoc.node.childnodes.count - 1 do
with aJSONDoc.node.childnodes[i] do
writeln(aJSONDoc.node.childnodes[i].nodename + '=' + aJSONDoc.node.childnodes[i].text)
finally
aMongoDBClient.free;
aJSONDoc.free;
end;
:::delphi
aMongoDBConnectionPoolClient := TAlMongoDBConnectionPoolClient.create(aDBHost, aDBPort);
try
::Thread1::
aMongoDBConnectionPoolClient.SelectData('test.exemple',
'{fieldA:123}', // query
'{fieldA:1, fieldB:1}', // return fields selector
aLocalVarJSONDOC.node);
::Thread2::
aMongoDBConnectionPoolClient.SelectData('test.exemple',
'{fieldA:999}', // query
'{fieldA:1, fieldB:1}', // return fields selector
aLocalVarJSONDOC.node);
finally
aMongoDBClient.free;
end;
:::delphi
aMongoDBTailMonitoringThread := TAlMongoDBTailMonitoringThread.Create(
aDBHost,
aDBPort,
'test.cappedCollectionExemple'
'{}', // the query
'{fieldA:1, fieldB:1}', // the return fields selector
Procedure (Sender: TObject; JSONRowData: TALJSONNode)
begin
writeln('New item added in cappedCollectionExemple: ' +
JSONRowData.childnodes['fieldA'].text);
end,
procedure (Sender: TObject; Error: Exception)
begin
writeln(Error.message);
end
);
....
aMongoDBTailMonitoringThread.free;