Running SQL commands by using the MongoDB API
You can run SQL statements by using the MongoDB API and retrieve results back. The results of the SQL statements are treated like they are documents in a JSON collection.
Before you begin
You must enable SQL operations by setting security.sql.passthrough=true in the wire listener properties file.
Procedure
From the MongoDB shell command, use the
abstract system collection system.sql as the collection name and
$sql as the query operator, followed by the SQL statement.
For
example:
> db.getCollection("system.sql").find({ "$sql": "sql_statement" })
To use host variables, include question marks in the SQL statement, and include the $bindings operator with an array that contains a value for each host variable in order of appearance. For example:
> db.getCollection("system.sql").find({ "$sql": "sql_statement",
"$bindings": [values]})
Examples
- Create an SQL table
- In this example, an SQL table is created by running the HCL
OneDB™ CREATE TABLE command by using the
MongoDB
API:
> db.getCollection("system.sql").find({ "$sql": "create table foo (c1 int)" })
- Drop an SQL table
- In this example, an SQL table is dropped by running the HCL
OneDB DROP
TABLE command by using the MongoDB API:
> db.getCollection("system.sql").find({"$sql": "drop table foo" })
- Delete SQL customer call records that are more than 5 years old
- In this example, customer call records stored in SQL tables are deleted by running the HCL
OneDB DELETE command by using the MongoDB API:
> db.getCollection("system.sql").findOne({ "$sql": "delete from cust_calls where (call_dtime + interval(5) year to year) < current" })
- Join JSON collections
- In this example, a query counts the number of orders customers placed by using an outer join to
include the customers who did not place
orders.
> db.getCollection("system.sql").find({ "$sql": "select c.customer_num,o.customer_num as order_cust,count(order_num) as order_count from customer c left outer join orders o on c.customer_num = o.customer_num group by 1, 2 order by 2" })
- Delete rows based on a host variable
- In this example, the statement includes a host variable that specifies to delete the rows that
have the name
"john".
> db.getCollection("system.sql").find({"$sql": "delete from mytab where name = ?", "$bindings" : ["john"] })
- Run a user-defined function with host variables
- In this example, the statement runs a user-defined routine with two host variables to raise
prices.
> db.getCollection("system.sql").find({ "$sql": "execute function raise_price(?, ?)", "$bindings" : [101, 0.10] })