| lang | en |
|---|---|
| title | Executing database commands |
| keywords | LoopBack 4.0, LoopBack 4, Node.js, TypeScript |
| sidebar | lb4_sidebar |
| permalink | /doc/en/lb4/Executing-database-commands.html |
{% include warning.html content="In general, it is always better to perform
database actions through Repository methods. Directly executing native database
commands may lead to unexpected results and other issues." %}
When you project outgrows built-in Repository methods, you can execute native
database commands to implement more complex data queries and manipulations, for
example execute a custom SQL query or invoke a MongoDB command.
LoopBack provides two APIs:
- DataSource-level
execute()method - Repository-level
execute()method
Both methods offer the same set of signatures, the implementation in Repository is just a thin wrapper delegating the task to DataSource.
Example use:
const result = await repository.execute('SELECT * FROM Products');Use parameterized queries to avoid SQL injection attacks.
const result = await repository.execute('SELECT * FROM Products WHERE id = ?', [
productId,
]);const result = await repository.execute(
'SELECT * FROM Products WHERE id = $1',
[productId],
);const result = await repository.execute('MyCollection', 'aggregate', [
{$unwind: '$data'},
{$out: 'tempData'},
]);Use parameterized queries whenever possible instead of constructing SQL strings manually.
See API docs for parameter reference, additional information and examples:
{% include important.html content="Each connector implements a slightly
different flavor of execute() to match the capabilities supported by the
database engine. Please refer to connector documentation to learn more about
the expected parameters and command/query syntax to use.
" %}
Not all connectors support execution of native database commands. Check your
connector's documentation to learn more. The following connectors are known to
support execute method.