はじめに
これまでの以下の記事で、Oracle Database API for MongoDBを利用することによりMongoDB Shell、mongoexport/mongoimportなどのMongoDBクライアントからAutonomous JSON Databaseを操作できることを確認しました。
[OCI]MongoDBクライアントからAutonomous JSON Databaseに接続してみた(MongoDB Shell編)
[OCI]MongoDBクライアントからAutonomous JSON Databaseに接続してみた(mongoexport/mongoimport編)
今回は、MongoDBの使用を前提に書かれているアプリケーションが、接続先をAutonomous JSON Databaseに変更するだけで動作するかを確認しました。
1.INSERT(insertOne()/insertMany())とSELECT(find())
検証のために、MongoDBに対するINSERT処理とSELECT処理を含むNode.jsのアプリケーションを作成しました。
(Node.js初心者なので、コードが美しくないのはご容赦ください)
const mongodb = require('mongodb');
const MongoClient = mongodb.MongoClient;
var async = require('async');
var url = "mongodb://admin:Demo%231Demo%231@127.0.0.1:27017/mongo?authSource=admin";
//var url = "mongodb://mongo:Demo%231Demo%231@XXXXXXXXXX-AJD1.adb.ap-tokyo-1.oraclecloudapps.com:27017/mongo?authMechanism=PLAIN&authSource=$external&ssl=true&retryWrites=false&loadBalanced=true";
console.log("Connected to " + url + "\n");
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mongo");
var coll = "dept";
async.series([
// ----------------------------------------------------------------------
// Insert Single Row
// ----------------------------------------------------------------------
function (callback) {
var obj = {"deptno":10,"deptname":"ACCOUNTING","location":"NEW YORK"};
dbo.collection(coll).insertOne(obj, function(err, res) {
if (err) throw err;
console.log("Inserted 1 document into collection " + coll + ".\n");
callback(null, "first");
});
},
// ----------------------------------------------------------------------
// Select All Rows
// ----------------------------------------------------------------------
function (callback) {
dbo.collection(coll).find().toArray(function(err, result) {
if (err) throw err;
console.log("Select All documents in collection " + coll + ".\n");
console.log(result);
console.log();
callback(null, "second");
});
},
// ----------------------------------------------------------------------
// INSERT Multiple Rows
// ----------------------------------------------------------------------
function (callback) {
var obj = [
{"deptno":20,"deptname":"RESEARCH","location":"DALLAS"},
{"deptno":30,"deptname":"SALES","location":"CHICAGO"},
{"deptno":40,"deptname":"OPERATIONS","location":"BOSTON"}
];
dbo.collection(coll).insertMany(obj, function(err, res) {
if (err) throw err;
console.log("Inserted 3 document into collection " + coll + ".\n");
callback(null, "third");
});
},
// ----------------------------------------------------------------------
// Select All Rows
// ----------------------------------------------------------------------
function (callback) {
dbo.collection(coll).find().toArray(function(err, result) {
if (err) throw err;
console.log("Select All documents in collection " + coll + ".\n");
console.log(result);
console.log();
callback(null, "fourth");
});
},
],
function (err, results) {
if (err) {
throw err;
}
db.close();
console.log('All done. ');
});
});
まずは接続先をローカルのMongoDBにして実行してみます。
[opc@work3 mongo]$ node insert.js
Connected to mongodb://admin:Demo%231Demo%231@127.0.0.1:27017/mongo?authSource=admin
Inserted 1 document into collection dept.
Select All documents in collection dept.
[
{
_id: new ObjectId("61eba8c870e8cfc3e3c3e48b"),
deptno: 10,
deptname: 'ACCOUNTING',
location: 'NEW YORK'
}
]
Inserted 3 document into collection dept.
Select All documents in collection dept.
[
{
_id: new ObjectId("61eba8c870e8cfc3e3c3e48b"),
deptno: 10,
deptname: 'ACCOUNTING',
location: 'NEW YORK'
},
{
_id: new ObjectId("61eba8c870e8cfc3e3c3e48c"),
deptno: 20,
deptname: 'RESEARCH',
location: 'DALLAS'
},
{
_id: new ObjectId("61eba8c870e8cfc3e3c3e48d"),
deptno: 30,
deptname: 'SALES',
location: 'CHICAGO'
},
{
_id: new ObjectId("61eba8c870e8cfc3e3c3e48e"),
deptno: 40,
deptname: 'OPERATIONS',
location: 'BOSTON'
}
]
All done.
[opc@work3 mongo]$
当然ですが、問題なく実行されました。
次に、接続先のみをAutonomous JSON Databaseに変えて実行してみます。
[opc@work3 mongo]$ node insert.js
Connected to mongodb://mongo:Demo%231Demo%231@XXXXXXXXXX-AJD1.adb.ap-tokyo-1.oraclecloudapps.com:27017/mongo?authMechanism=PLAIN&authSource=$external&ssl=true&retryWrites=false&loadBalanced=true
Inserted 1 document into collection dept.
Select All documents in collection dept.
[
{
_id: new ObjectId("61eba701a695c59e54bea6ed"),
deptno: 10,
deptname: 'ACCOUNTING',
location: 'NEW YORK'
}
]
Inserted 3 document into collection dept.
Select All documents in collection dept.
[
{
_id: new ObjectId("61eba701a695c59e54bea6ee"),
deptno: 20,
deptname: 'RESEARCH',
location: 'DALLAS'
},
{
_id: new ObjectId("61eba701a695c59e54bea6ef"),
deptno: 30,
deptname: 'SALES',
location: 'CHICAGO'
},
{
_id: new ObjectId("61eba701a695c59e54bea6f0"),
deptno: 40,
deptname: 'OPERATIONS',
location: 'BOSTON'
},
{
_id: new ObjectId("61eba701a695c59e54bea6ed"),
deptno: 10,
deptname: 'ACCOUNTING',
location: 'NEW YORK'
}
]
All done.
[opc@work3 mongo]$
こちらも問題なく実行できました
INSERT処理、SELECT処理をおこなうMongoDBのアプリケーションが、接続先を変更しただけで、そのままAutonomous JSON Databaseで実行できることが確認できました。
2.UPDATE(updateOne()/UpdateMany())
次はUPDATE処理を含むアプリケーションです。
const mongodb = require('mongodb');
const MongoClient = mongodb.MongoClient;
var async = require('async');
//var url = "mongodb://admin:Demo%231Demo%231@127.0.0.1:27017/mongo?authSource=admin";
var url = "mongodb://mongo:Demo%231Demo%231@XXXXXXXXXX-AJD1.adb.ap-tokyo-1.oraclecloudapps.com:27017/mongo?authMechanism=PLAIN&authSource=$external&ssl=true&retryWrites=false&loadBalanced=true";
console.log("Connected to " + url + "\n");
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mongo"); //DB名
var coll = "dept"; //コレクション名
async.series([
// ----------------------------------------------------------------------
// Update Single Row
// ----------------------------------------------------------------------
function (callback) {
var where = {deptno: 10};
var set = {$set: {location: "NY"}};
dbo.collection(coll).updateOne(where, set, function(err, result) {
if (err) throw err;
console.log("Updated 1 document in collection " + coll + ".\n");
callback(null, "first");
});
},
// ----------------------------------------------------------------------
// Select All Rows
// ----------------------------------------------------------------------
function (callback) {
dbo.collection(coll).find().toArray(function(err, result) {
if (err) throw err;
console.log("Select All documents in collection " + coll + ".\n");
console.log(result);
console.log();
callback(null, "second");
});
},
// ----------------------------------------------------------------------
// Update All Rows
// ----------------------------------------------------------------------
function (callback) {
var where = {};
var set = {$set: {country: "USA"}};
dbo.collection(coll).updateMany(where, set, function(err, result) {
if (err) throw err;
console.log("Updated All documents in collection " + coll + ".\n");
callback(null, "third");
});
},
// ----------------------------------------------------------------------
// Select All Rows
// ----------------------------------------------------------------------
function (callback) {
dbo.collection(coll).find().toArray(function(err, result) {
if (err) throw err;
console.log("Select All documents in collection " + coll + ".\n");
console.log(result);
console.log();
callback(null, "fourth");
});
},
],
function (err, results) {
if (err) {
throw err;
}
db.close();
console.log('All done.' );
});
});
まずは接続先をローカルのMongoDBにして実行してみます。
[opc@work3 mongo]$ node update.js
Connected to mongodb://admin:Demo%231Demo%231@127.0.0.1:27017/mongo?authSource=admin
Updated 1 document in collection dept.
Select All documents in collection dept.
[
{
_id: new ObjectId("61eba8c870e8cfc3e3c3e48b"),
deptno: 10,
deptname: 'ACCOUNTING',
location: 'NY'
},
{
_id: new ObjectId("61eba8c870e8cfc3e3c3e48c"),
deptno: 20,
deptname: 'RESEARCH',
location: 'DALLAS'
},
{
_id: new ObjectId("61eba8c870e8cfc3e3c3e48d"),
deptno: 30,
deptname: 'SALES',
location: 'CHICAGO'
},
{
_id: new ObjectId("61eba8c870e8cfc3e3c3e48e"),
deptno: 40,
deptname: 'OPERATIONS',
location: 'BOSTON'
}
]
Updated All documents in collection dept.
Select All documents in collection dept.
[
{
_id: new ObjectId("61eba8c870e8cfc3e3c3e48b"),
deptno: 10,
deptname: 'ACCOUNTING',
location: 'NY',
country: 'USA'
},
{
_id: new ObjectId("61eba8c870e8cfc3e3c3e48c"),
deptno: 20,
deptname: 'RESEARCH',
location: 'DALLAS',
country: 'USA'
},
{
_id: new ObjectId("61eba8c870e8cfc3e3c3e48d"),
deptno: 30,
deptname: 'SALES',
location: 'CHICAGO',
country: 'USA'
},
{
_id: new ObjectId("61eba8c870e8cfc3e3c3e48e"),
deptno: 40,
deptname: 'OPERATIONS',
location: 'BOSTON',
country: 'USA'
}
]
All done.
[opc@work3 mongo]$
当然ですが、問題なく実行されました。
次に、接続先のみをAutonomous JSON Databaseに変えて実行してみます。
[opc@work3 mongo]$ node update.js
Connected to mongodb://mongo:Demo%231Demo%231@XXXXXXXXXX-AJD1.adb.ap-tokyo-1.oraclecloudapps.com:27017/mongo?authMechanism=PLAIN&authSource=$external&ssl=true&retryWrites=false&loadBalanced=true
Updated 1 document in collection dept.
Select All documents in collection dept.
[
{
_id: new ObjectId("61eba701a695c59e54bea6ee"),
deptno: 20,
deptname: 'RESEARCH',
location: 'DALLAS'
},
{
_id: new ObjectId("61eba701a695c59e54bea6ef"),
deptno: 30,
deptname: 'SALES',
location: 'CHICAGO'
},
{
_id: new ObjectId("61eba701a695c59e54bea6f0"),
deptno: 40,
deptname: 'OPERATIONS',
location: 'BOSTON'
},
{
_id: new ObjectId("61eba701a695c59e54bea6ed"),
deptno: 10,
deptname: 'ACCOUNTING',
location: 'NY'
}
]
Updated All documents in collection dept.
Select All documents in collection dept.
[
{
_id: new ObjectId("61eba701a695c59e54bea6ee"),
deptno: 20,
deptname: 'RESEARCH',
location: 'DALLAS',
country: 'USA'
},
{
_id: new ObjectId("61eba701a695c59e54bea6ef"),
deptno: 30,
deptname: 'SALES',
location: 'CHICAGO',
country: 'USA'
},
{
_id: new ObjectId("61eba701a695c59e54bea6f0"),
deptno: 40,
deptname: 'OPERATIONS',
location: 'BOSTON',
country: 'USA'
},
{
_id: new ObjectId("61eba701a695c59e54bea6ed"),
deptno: 10,
deptname: 'ACCOUNTING',
location: 'NY',
country: 'USA'
}
]
All done.
[opc@work3 mongo]$
こちらも問題なく実行できました
UPDATE処理をおこなうMongoDBのアプリケーションが、接続先を変更しただけで、そのままAutonomous JSON Databaseで実行できることが確認できました。
#3 .DELETE(deleteOne()/deleteMany())
最後はDELETE処理を含むアプリケーションです。
const mongodb = require('mongodb');
const MongoClient = mongodb.MongoClient;
var async = require('async');
//var url = "mongodb://admin:Demo%231Demo%231@127.0.0.1:27017/mongo?authSource=admin";
var url = "mongodb://mongo:Demo%231Demo%231@SYA6VPHK3PZLKHQ-AJD1.adb.ap-tokyo-1.oraclecloudapps.com:27017/mongo?authMechanism=PLAIN&authSource=$external&ssl=true&retryWrites=false&loadBalanced=true";
console.log("Connected to " + url + "\n");
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db("mongo"); //DB名
var coll = "dept"; //コレクション名
async.series([
// ----------------------------------------------------------------------
// Delete Single Row
// ----------------------------------------------------------------------
function (callback) {
var where = {deptno: 10};
dbo.collection(coll).deleteOne(where, function(err, result) {
if (err) throw err
console.log("Deleted 1 document in collection " + coll + ".\n");
callback(null, "first");
});
},
// ----------------------------------------------------------------------
// Select All Rows
// ----------------------------------------------------------------------
function (callback) {
dbo.collection(coll).find().toArray(function(err, result) {
if (err) throw err;
console.log("Select All documents in collection " + coll + ".\n");
console.log(result);
console.log();
callback(null, "second");
});
},
// ----------------------------------------------------------------------
// Delete All Rows
// ----------------------------------------------------------------------
function (callback) {
var where = {};
dbo.collection(coll).deleteMany(where, function(err, result) {
if (err) throw err;
console.log("Deleted All documents in collection " + coll + ".\n");
callback(null, "third");
});
},
// ----------------------------------------------------------------------
// Select All Rows
// ----------------------------------------------------------------------
function (callback) {
dbo.collection(coll).find().toArray(function(err, result) {
if (err) throw err;
console.log("Select All documents in collection " + coll + ".\n");
console.log(result);
console.log();
callback(null, "fourth");
});
},
],
function (err, results) {
if (err) {
throw err;
}
db.close();
console.log('All done.');
});
});
まずは接続先をローカルのMongoDBにして実行してみます。
[opc@work3 mongo]$ node delete.js
Connected to mongodb://admin:Demo%231Demo%231@127.0.0.1:27017/mongo?authSource=admin
Deleted 1 document in collection dept.
Select All documents in collection dept.
[
{
_id: new ObjectId("61eba8c870e8cfc3e3c3e48c"),
deptno: 20,
deptname: 'RESEARCH',
location: 'DALLAS',
country: 'USA'
},
{
_id: new ObjectId("61eba8c870e8cfc3e3c3e48d"),
deptno: 30,
deptname: 'SALES',
location: 'CHICAGO',
country: 'USA'
},
{
_id: new ObjectId("61eba8c870e8cfc3e3c3e48e"),
deptno: 40,
deptname: 'OPERATIONS',
location: 'BOSTON',
country: 'USA'
}
]
Deleted All documents in collection dept.
Select All documents in collection dept.
[]
All done.
[opc@work3 mongo]$
当然ですが、問題なく実行されました。
次に、接続先のみをAutonomous JSON Databaseに変えて実行してみます。
[opc@work3 mongo]$ node delete.js
Connected to mongodb://mongo:Demo%231Demo%231@SYA6VPHK3PZLKHQ-AJD1.adb.ap-tokyo-1.oraclecloudapps.com:27017/mongo?authMechanism=PLAIN&authSource=$external&ssl=true&retryWrites=false&loadBalanced=true
Deleted 1 document in collection dept.
Select All documents in collection dept.
[
{
_id: new ObjectId("61eba701a695c59e54bea6ee"),
deptno: 20,
deptname: 'RESEARCH',
location: 'DALLAS',
country: 'USA'
},
{
_id: new ObjectId("61eba701a695c59e54bea6ef"),
deptno: 30,
deptname: 'SALES',
location: 'CHICAGO',
country: 'USA'
},
{
_id: new ObjectId("61eba701a695c59e54bea6f0"),
deptno: 40,
deptname: 'OPERATIONS',
location: 'BOSTON',
country: 'USA'
}
]
Deleted All documents in collection dept.
Select All documents in collection dept.
[]
All done.
[opc@work3 mongo]$
こちらも問題なく実行できました
DELETE処理をおこなうMongoDBのアプリケーションが、接続先を変更しただけで、そのままAutonomous JSON Databaseで実行できることが確認できました。
まとめ
Oracle Database API for MongoDBを利用することで、MongoDBを使用するNode.jsアプリケーションが、接続先を変更するだけでAutonomous JSON Databaseに接続して利用できることが確認できました。