> npm install mongodb
続いて、データベースに接続してコレクションを作成した後ドキュメントを挿入し、コレクションを削除するという簡単なサンプルプログラム。
var mongo = require('mongodb');
// ドキュメントサンプル。
var doc1 = {'key1':'val1'};
var doc2 = {'key2-1':'val2-1', 'key2-2':'val2-2'};
var docs = [doc1, doc2];
// serverの設定。
var server = new mongo.Server('localhost', 27017, {auto_reconnect: true});
// dbの設定。
var db = new mongo.Db('exampleDb', server, {safe:true});
//var db = new mongo.Db('exampleDb', server);
var closeDB = function() {
db.close(true, function(err, result) {
console.log("close!");
});
}
// コネクションオープン。
db.open(function(err, db) {
if (!err) {
console.log("open!");
// コレクションの作成。既に存在する場合はエラー。
db.createCollection('collection1', {strict:true}, function(cerr, collection) {
if (!cerr) {
console.log("create!");
// ドキュメントの格納。
collection.insert(docs, function(ierr, res) {
if (!ierr) {
console.log("insert doc1!");
// ドキュメントの検索。
collection.find().toArray(function(ferr, items) {
if (!ferr) {
console.log(items);
// コレクションの削除。
collection.drop();
closeDB();
} else {
console.log(ferr);
collection.drop();
closeDB();
}
});
} else {
console.log(ierr);
collection.drop();
closeDB();
}
});
} else {
console.log(cerr);
closeDB();
}
});
} else {
console.log(err);
}
});
MongoDBでは、今のところデフォルトで書き込みの結果を待たずにリターンを返します(safe=false)。つまり、書き込みが成功したか失敗したかがすぐにわかりません。これは、データベースを作成する際にsafe=trueを設定することで変更できます。また、書き込みの挙動は以下のように設定することができます。
- j:ジャーナル(redoログのようなもの)のコミットを待つ。ジャーナルが設定されていなければそのまま返す。
- w:レプリカに指定数反映されるのを待つ。タイムアウト指定も可能。
- fsync:ジャーナリングされてない場合は全てのファイルをfsyncするのを待つ。ジャーナリングしている場合は次のグループのコミットを待つ。非推奨なのでjを使うべき。
MongoDBでは動的にcollectionを作成するケースも多いですが、既に作成しようとするcollection存在する場合はエラーを受け取りたい、という場合もあります。その場合はcreateCollectionでstrict:trueを指定します。
- createCollectionでstrict:false(デフォルト)の場合、既に存在する場合は何もしない(作成しない)
- createCollectionでstrict:trueの場合、既に存在する場合はエラーを返す。
- collectionでstrict:false(デフォルト)の場合、コレクションが存在しない場合は最初のinsertで作成する。
- collectionでstrict:trueの場合、コレクションが存在しない場合はエラーを返す。
Node.jsというよりMongoDBの話になりましたが、他の言語でMongoDBを使っている開発者ならかなり違和感なく使えそうですね。また、MongoDBはWeb上にもドキュメントが揃ってきていますので、NoSQL初心者でも比較的情報は得やすいですね。
0 件のコメント:
コメントを投稿