connector は、SQL クエリを対応するMongoDB クエリにマッピングします。ここではトランスフォーメーションの詳細は説明しませんが、いくつか代表的なものを説明します。connector は、Aggregation Framework などのMongoDB の機能の良いところを使って望まれる結果を出します。
SELECT クエリ
SELECT ステートメントは、次のようにfind() 関数としてマッピングされます。
| |
SQL クエリ | MongoDB クエリ |
SELECT * FROM Users |
db.users.find() |
SELECT user_id, status
FROM Users |
db.users.find(
{},
{ user_id: 1, status: 1, _id: 0 }
) |
SELECT *
FROM Users
WHERE status = 'A' |
db.users.find(
{ status: "A" }
) |
SELECT *
FROM Users
WHERE status = 'A' OR age=50 |
db.users.find(
{ $or: [ { status: "A" },
{ age: 50 } ] }
) |
SELECT *
FROM Users
WHERE name LIKE 'A%' |
db.users.find(
{name: /^a/}
) |
SELECT * FROM Users
WHERE status = 'A'
ORDER BY user_id ASC |
db.users.find( { status: "A" }.sort( { user_id: 1 } ) |
SELECT *
FROM Users
WHERE status = 'A'
ORDER BY user_id DESC |
db.users.find( {status: "A" }.sort( {user_id: -1} ) |
Aggregate クエリ
MongoDB のAggregation Framework はversion 2.2 から追加されました。connector は、さまざまな集計クエリの拡張的利用を行います。以下にいくつか例を示します。
| |
SQL クエリ | MongoDB クエリ |
SELECT Count(*) As Count
FROM Orders |
db.orders.aggregate( [
{
$group: {
_id: null,
count: { $sum: 1 }
}
}
] ) |
SELECT Sum(price) As Total
FROM Orders |
db.orders.aggregate( [
{
$group: {
_id: null,
total: { $sum: "$price" }
}
}
] ) |
SELECT cust_id, Sum(price) As total
FROM Orders
GROUP BY cust_id
ORDER BY total |
db.orders.aggregate( [
{
$group: {
_id: "$cust_id",
total: { $sum: "$price" }
}
} ,
{ $sort: {total: 1 } }
] ) |
SELECT cust_id, ord_date, Sum(price) As total
FROM Orders
GROUP BY cust_id, ord_date
HAVING total > 250 |
db.orders.aggregate( [
{
$group: {
_id: {
cust_id: "$cust_id",
ord_date: {
month: { $month: "$ord_date" },
day: { $dayOfMonth: "$ord_date" },
year: { $year: "$ord_date"}
}
},
total: { $sum: "$price" }
}
},
{ $match: { total: { $gt: 250 } } }
] ) |
INSERT ステートメント
INSERT ステートメントは、次のようにINSERT 関数としてマッピングされます。
| |
SQL クエリ | MongoDB クエリ |
INSERT INTO users (user_id, age, status, [address.city], [address.postalcode])
VALUES ('bcd001', 45, 'A', 'Chapel Hill', 27517) |
db.users.insert(
{ user_id: "bcd001", age: 45, status: "A", address:{ city:"Chapel Hill", postalCode:27514} }
) |
INSERT INTO t1 ("c1") VALUES (('a1', 'a2', 'a3')) |
db.users.insert({"c1": ['a1', 'a2', 'a3']}) |
INSERT INTO t1 ("c1") VALUES (()) |
db.users.insert({"c1": []}) |
INSERT INTO t1 ("a.b.c.c1") VALUES (('a1', 'a2', 'a3')) |
db.users.insert("a":{"b":{"c":{"c1":['a1','a2', 'a3']}}}) |
更新ステートメント
UPDATE ステートメントは、次のようにupdate 関数としてマッピングされます。
| |
SQL クエリ | MongoDB クエリ |
UPDATE users
SET status = 'C', [address.postalcode] = 90210
WHERE age > 25 |
db.users.update(
{ age: { $gt: 25 } },
{ $set: { status: "C", address.postalCode: 90210 },
{ multi: true }
) |
削除ステートメント
DELETE ステートメントは、次のようにdelete 関数としてマッピングされます。
| |
SQL クエリ | MongoDB クエリ |
DELETE FROM users WHERE status = 'D' |
db.users.remove( { status: "D" } ) |