読者です 読者をやめる 読者になる 読者になる

フロントサイドエンジニアという選択肢

HTMLコーダー → ECサイト運営 → システムエンジニア という経歴の著者がフロントサイトエンジニアという職業に今後の活路を見出し、その道に進むために取得した技術を貯めておくブログ

(Node.js)MongoDBを使用するための基本

Node.jsでMongoDBを使用するために必要な基本事項を残しておきます。

まずコマンドプロンプトでMongoDBを起動します。 cd C:\mongodb\bin
mongod.exe --config C:\mongodb\bin\mongodb.config

MongoDBを使用するためのモジュールを用意して、モジュールを書き込んだファイルをNode.jsから読み込むようにします。mongo_database.jsというファイルに保存した場合は以下のように呼び出します。
var collection = require('mongo_database.js');
モジュールの内容は以下のとおりです。

/*
  mongoDB基本機能モジュール
  モジュールを呼び出して変数に格納すると、DBのコレクションが入る
  var col = require('this_module.js');

  書き込み方法
  col.write({json data});
  
  読み込み方法
  col.read();
*/
(function(){
var mongodb;    // mongoDBモジュール
var server;     // mongoDBサーバ
var db;         // データベース
var collection, // コレクション
var databaseName = 'myDatabase';     // データベース名
var collectionName = 'myCollection'; // コレクション名
	
var write;      // 書き込みメソッド
var read;       // 読み込みメソッド
	

// mongoDBモジュールの取得
try{
	// mongoDBモジュールがインストールされているか確認してから呼び出す。
	require.resolve('mongodb');
	mongodb = require('mongodb');
}
catch(err){
	console.log('ERROR:mongoDBモジュールが見つかりません');
}

// データベースに接続
// デフォルトポートの取得は mongodb.Connection.DEFAULT_PORT
server = new mongodb.Server('localhost', 27017);
// ドライバーでエラー情報を受け取るためにsafe:trueにする
db = new mongodb.Db(databaseName, server, {safe:true}); 
db.open(function(err, db){
	if(err){
		console.error('DB接続エラー');
		throw(err);
	}
	console.log('DB接続完了');
	
	// 接続完了後にコレクション取得
	collection = db.collection(collectionName);
});

// 書き込み用メソッド
write = function(json){
	collection.insert(
		json,
		// 書き込み処理後のコールバック関数(省略可)
		function(err, data){
			if(err){
				console.error('書き込み時にエラーが発生しました');
				throw(err);
			}
			console.log('データ書き込み完了:',data);
	});
}

// 読み込み用メソッド
read = function(){
	var cursor = collection.find();
	cursor.toArray(function(err, docs){
		// toArray用のコールバック関数
		if(err){
			console.error('読み込みエラー');
			throw(err);
		}
		console.log(docs);
	});
}

module.exports ={
	write:write,
	read:read
}
}());
カーソルについて

読み込み用メソッド内でfindメソッドを使用していますが、このfindメソッドの戻り値はcursorオブジェクトです。
cursorオブジェクトで使用できるメソッドは以下の様なものがあります。

cursor.each(callback)
コレクションをドキュメント単位で処理します。コールバック関数の引数は(エラーオブジェクト, ドキュメント)という形で入ってきます。
cursor.each(function(error, document){
    if(error){
        throw(error);
    }
    document.write(document);
}); 

cursor.sort(key:array)
ドキュメントのソートを行います。引数には[フィールド名,並び順]の配列を配列に入れて2次元配列の形にして渡します。並び順は、昇順にする場合は「1」、または「asc」。降順にする場合は「-1」または「desc」と指定します。以下のサンプルはカーソルのデータを名前順、年齢の高い順にソートします。
cursor.sort([{'name':1},{'age':-1}]);

cursor.skip(slip:num)
cursor.limit(limit:num)
ページングなどで使用できる取得開始位置と取得件数を指定できます。どちらも引数には数値を渡します。skipは引数の数を飛ばし、 limitは引数の数だけドキュメントを取得します。11件目から20件目まで取得する場合は以下のようにします。
cursor.skip(10).limit(10);

cursor.count(callback)
件数を取得します。件数を取得した後の処理をコールバックで指定することができます。コールバックの引数には(エラーオブジェクト, 件数)が入ってきます。
cursor.count(function(err, cnt){
	console.log('件数:', cnt);
});